4

csvファイルを1行ずつ解析しようとしていますが、その形式は次のようなものです:

"name","content1,with commas as you see", "content2, also may contain commas", "..."
...
...

引用符なしで、特定の列のコンテンツを取得したい。例: 1 列目と 3 列目。したがって、期待されるコンテンツは次のようになります。

name  (if get column 1)
content2, also may contain commas   (if get column 3)

awk を使用しようとしましたが、うまくいきませんでした。また、私は試しました:

while IFS=, read col1 col2 col3 col4; 
do 
echo "got ${col1}|${col3}"; 
done < file

しかし、引用符 "" が含まれており、col3 の内容が間違っており、各列内にコンマが混在しています。各列にコンマを含むような形式を分割するにはどうすればよいですか?

4

2 に答える 2

3

このような複雑さのため、次のような実際の CSV パーサーを使用すると、おそらくはるかに簡単になりますcsvtool

$ csvtool col 3 - <<< '"name","content1,with commas as you see", "content2, also may contain commas", "..."'
"content2, also may contain commas"
于 2013-06-11T14:11:19.173 に答える
3

あなたが持っている場合はGNU awkFPATあなたの救助に来ます。

gawk '{print $1,$3}' FPAT="([^,]+)|(\"[^\"]+\")" my.csv

ではawk通常FS、フィールドとは何かではなく、フィールドとは何かを定義する which を使用します。この特定のケースでは、フィールドが何であるかによってフィールドを定義したいと考えており、それをFPAT正確に行うことができます。

于 2013-06-11T13:39:12.633 に答える