Comportamento estranho do script Bash com echo - printf em um arquivo

1

Eu quero imprimir parte do conteúdo de um arquivo .csv em outro arquivo se houver uma correspondência com alguma condição:

O conteúdo csv é assim

abc test;ABCtest.it
xyz test;XYZtest.com

Eu leio o conteúdo em uma variável e o grep para alguma string

csvContent=$(<$file.csv)

csvRow="$(echo "$csvContent" | grep -i "abc test")"

IFS=';' read -a array <<< "$csvRow"
name="${array[0]}"
url="${array[1]}"

echo -ne "\n$url,$name" >> "$outputDir/$fileName"

Mas o arquivo de saída não contém a parte da URL

Se eu tentar isso

echo $url

está impresso no terminal!

Eu também tentei com printf e com um nome de arquivo com código de acesso, mas nada!

printf '%s %s\n' "$url" "$name"  >> test.txt

Parece que quando eu tento concatenar outra coisa (uma variável ou uma string) depois da variável $ url alguma parte disto é deletada ou sobrescrita no arquivo de saída

Por exemplo, se eu tentar com isso

printf '%s %s\n' "$url" "pp"  >> test.txt

O que obtenho com um simples teste de gato.txt é este:

 pptest.it

é como se parte dele fosse sobrescrito por um espaço vazio inicial

o conteúdo da variável $ url deve ser ABCTest.it

é muito estranho

    
por GabryRome 01.04.2015 / 20:07

2 respostas

2

Você tem retornos de carro nas extremidades das linhas no arquivo file.csv , e assim eles são lidos na sua variável url . E assim, quando você escreve, os dados da URL são seguidos por um retorno de carro e sobrescritos por dados subseqüentes.

    
por 01.04.2015 / 20:18
0

Se é um arquivo csv padrão como este

col1,col2,abc test;ABCtest.it,col4,col5
col1,col2,xyz test;XYZtest.com,col4,col5

Você pode usar o corte ou provavelmente o awk.

grep -i "abc test" <filename.csv> | cut -f3 -d',' | cut -f2 -d';'

    
por 01.04.2015 / 20:19