espaço desconhecido entre os dígitos após o comando echo

1

Eu tenho três arquivos de texto:

ano:

2014
2014
2014

mês:

03
03
03

dia:

08
09
10

Eu uso essa função para combiná-los em uma data:

function pl {                
  sed -n "p" 
}

for (( j=1; j <= 3; j++ ))
do
    yr=$(pl $j year)
    mnth=$(pl $j month)
    dy=$(pl $j day)
    date_format=$yr-$mnth-$dy
    echo $date_format
done

Minha saída, no entanto, parece:

2014 -03-08
2014 -03-09
2014 -03-10

Eu preciso remover o espaço entre "2014" e "-". Os outros códigos usam o $ date_format, portanto, não deve haver espaço entre os caracteres.

    
por deepblue_86 21.10.2015 / 15:13

3 respostas

1

Aqui está uma solução rápida para se livrar do espaço em branco na sua variável $date_format :

date_format=${date_format//[[:space:]]/}
echo "$date_format"
    
por A.P. 21.10.2015 / 15:16
1

Se você estiver obtendo essa saída, terá um espaço à direita no arquivo year . Isso funciona exatamente como esperado, se você não fizer isso:

$ printf "2013\n2013\n2013\n" > year; printf "03\n03\n03\n" "03" > month; printf "08\n09\n10\n" > day
$ for (( j=1; j <= 3; j++ )); do
    yr=$(pl $j year)
    mnth=$(pl $j month)
    dy=$(pl $j day)
    date_format=$yr-$mnth-$dy
    echo $date_format
done
2013-03-08
2013-03-09
2013-03-10

E, se você adicionar um espaço à direita:

$ printf "%s2013 \n2013 \n2013 \n" > year
$ for (( j=1; j <= 3; j++ )); do
>     yr=$(pl $j year)
>     mnth=$(pl $j month)
>     dy=$(pl $j day)
>     date_format=$yr-$mnth-$dy
>     echo $date_format
> done
2013 -03-08
2013 -03-09
2013 -03-10

Portanto, a solução mais simples é remover o espaço do seu arquivo de entrada:

sed -i 's/ *$//' year

Note, no entanto, que você está usando uma solução muito complexa para um problema muito simples:

$ paste -d"-" year month day | tr -d ' '
2013-03-08
2013-03-09
2013-03-10
    
por terdon 21.10.2015 / 16:22
0

Remover tudo após o ano / mês / dia diretamente no comando sed ;

Na função pl() , substitua

sed -n "p" 

com

sed -n "s/\([0-9]*\).*//p" 
    
por kos 21.10.2015 / 15:18