レコードデータを新しい行に移動

レコードデータを新しい行に移動

いくつかのレコードのデータが新しい行に移動する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。現在の行にエラーがある場合は、次のデータ行を追加します。

おすすめ記事