私はFPATでうれしくgawkを使用しています。ここで私は私の例で使用するスクリプトです:空のフィールド、エスケープされた引用符、カンマでawkでCSVを解析します。
#!/usr/bin/gawk -f
BEGIN {
FPAT="([^,]*)|(\"[^\"]+\")"
}
{
for (i=1; i<=NF; i++) {
printf "Record #%s, field #%s: %s\n", NR, i, $i
}
}
はシンプル、引用符なし
作品も。引用符
で
$ echo 'a,b,c,d' | ./test.awk
Record #1, field #1: a
Record #1, field #2: b
Record #1, field #3: c
Record #1, field #4: d
はうまく動作します。空の列で
$ echo '"a","b",c,d' | ./test.awk
Record #1, field #1: "a"
Record #1, field #2: "b"
Record #1, field #3: c
Record #1, field #4: d
とうまく動作し
を引用しています。$ echo '"a","b",,d' | ./test.awk
Record #1, field #1: "a"
Record #1, field #2: "b"
Record #1, field #3:
Record #1, field #4: d
では、引用符、空の列をエスケープしても
作品を引用しています。列エスケープ引用符を含むコンマで終わると
$ echo '"""a"": aaa","b",,d' | ./test.awk
Record #1, field #1: """a"": aaa"
Record #1, field #2: "b"
Record #1, field #3:
Record #1, field #4: d
が失敗。
$ echo '"""a"": aaa,","b",,d' | ./test.awk
Record #1, field #1: """a"": aaa
Record #1, field #2: ","
Record #1, field #3: b"
Record #1, field #4:
Record #1, field #5: d
予想される出力:
$ echo '"""a"": aaa,","b",,d' | ./test_that_would_be_working.awk
Record #1, field #1: """a"": aaa,"
Record #1, field #2: "b"
Record #1, field #4:
Record #1, field #5: d
は、この作業になるだろうFPATのための正規表現があり、またはこれだけのawkでサポートされていませんか?
パターンは"
で、それに続く単一の文字は"
です。正規表現のクラス検索は、一度に1文字ずつしか動作しないので、はと一致しません。""
と一致します。
私はそこにオプションがあるかもしれないと思うが、私はそれを動作させるのに十分ではない。
@RomanPerekhrest、それは四つのフィールドです。フィールドセパレータとして '|| 'を使用すると、' '||" b "b、| c' – jas
@BenoitDuffez、別の解決策がありますか?単純な1ライナー – RomanPerekhrest
@BenoitDuffez、残念ながら、質問は重複としてマークされており、私は答えを追加することはできません。それでも入手したいのであれば、 'awk'に言及することなく、' python'タグで質問を投稿してください。そして、私に知らせてください – RomanPerekhrest