エコー付きのBashスクリプト - ファイル内のprintfの奇妙な動作

エコー付きのBashスクリプト - ファイル内のprintfの奇妙な動作

特定の条件と一致する場合は、.csvファイルの一部を別のファイルに印刷したいと思います。

csvの内容はこれです

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

変数の内容を読み取り、いくつかの文字列をgrepします。

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"

ただし、出力ファイルにはURL部分は含まれていません。

私がこれをしようとすると

echo $url

端末に印刷されます!

また、printfとハードコードされたファイル名を試してみましたが、何もありませんでした!

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

$url変数の後に他の項目(変数または文字列)を連結しようとすると、一部の部分が削除されたり、出力ファイルに上書きされたりするようです。

たとえば、私がしようとすると

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

単にcat test.txtで取得することは次のとおりです。

 pptest.it

始まりの空きスペースが一部を覆っているようだ

$url 変数の内容は次のようになります。ABCtest.it

これは変です

答え1

ファイルの行末にはキャリッジリターンがあるため、変数file.csvとして読み込まれますurl。したがって、これを作成すると、URLデータの後にキャリッジリターンが続き、後続のデータが上書きされます。

答え2

このような標準のcsvファイルの場合

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

カットまたはawkを使用できます。

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

関連情報