いくつかのレコードのデータが新しい行に移動するCSVファイルがあります。
例:
ABCD,1234,QWER
ASDF
,2345,VGFT
"ASDF,12",1212,ASDR
1234,ZXCV,ERTT
出力は次のようになります。
ABCD,1234,QWER
ASDF,2345,VGFT
"ASDF,12",1212,ASDR
1234,ZXCV,ERTT
2番目と3番目の列を組み合わせる方法はありますか?
ベストアンサー1
以下は、与えられたデータに対して機能する素朴なハッキングです。
$ awk -F, 'NF != 3 { printf("%s",$0); getline } 1' file.csv
ABCD,1234,QWER
ASDF,2345,VGFT
1234,ZXCV,ERTT
これは、awk
ファイルをコンマ区切りのデータセットに解析することです。行に正確に 3 つのフィールド ( ) がない場合、NF != 3
これまでに読み込んだ行のビットが後行改行なしのまま出力され、次の行が読み込まれます。 Final1
はの略語{ print }
で、すべての行を印刷します。
最初のブロックがトリガされた場合、最後の1
/は、print
出力の終わりに残りの中断が出力されるようにしますprintf
。
そのバリエーションは次のとおりですsed
。
$ sed -E '/^[^,]+,[^,]+,[^,]+$/!{ N; s/\n//; }' file.csv
ABCD,1234,QWER
ASDF,2345,VGFT
1234,ZXCV,ERTT
同様に、サンプルデータに示されているものとは異なる方法で行が変わると、この機能は機能しない可能性があります。
このsed
スクリプトが行うことは、正規表現を使用して各行をテストすることです^[^,]+,[^,]+,[^,]+$
。一致する場合、コンマで区切られたコンマ以外の文字で構成される3つのフィールドがあるように見える行があります。もしそうならいいえこの場合、次の行は現在の行の末尾に追加され、2行の間に挿入された改行文字はN
削除されます。sed
コードsed
はコードと同じロジックに従いますawk
。現在の行にエラーがある場合は、次のデータ行を追加します。