特定の条件と一致する場合は、.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';'