1. ホーム
  2. linux

[解決済み] BashでCSVファイルをパースするには?

2022-07-07 11:16:12

質問

長いBashスクリプトに取り組んでいます。 私はBash変数にCSVファイルからセルを読みたいと思います。 私は行と最初の列をパースすることができますが、他の列はできません。 以下は、これまでの私のコードです。


  cat myfile.csv|while read line
  do
    read -d, col1 col2 < <(echo $line)
    echo "I got:$col1|$col2"
  done

最初の列だけしか表示されません。 追加テストとして、以下を試してみました。

read -d, x y < <(echo a,b,)

そして、$yは空です。 そこで、試してみました。

read x y < <(echo a b)

また、$yは b . なぜ?

どのように解決するのですか?

この場合 IFS の代わりに -d :

while IFS=, read -r col1 col2
do
    echo "I got:$col1|$col2"
done < myfile.csv

一般的なCSVパースには、Bashでは扱えないような、内部カンマを含む引用フィールドを扱える特別なツールを使用する必要があることに注意してください。そのようなツールの例としては cvstool csvkit .