カンマ区切りフィールドの管理

カンマ区切りフィールドの管理

テキストファイルには、次の形式のビッグデータがあります。

x, xx, xxx, xxxx, , , ,
x, xx, , xxxx, xxxx,

だから、ファイルからカンマの後のフィールド番号3が空のすべての行を削除したいと思います。

結果は次のとおりです。

x, xx, xxx, xxxx, , , ,

だから何をしますか?

答え1

GNUの使用awk:

$ awk -F' *, *' '$3' file
x, xx, xxx, xxxx, , , ,  

-Fフィールド区切り文字を正規表現␣*,␣*(スペース、アスタリスク、コンマ、スペース、アスタリスク)に設定しました。この式は、ゼロ個以上のスペースで囲まれたコンマと一致します。

実際のawkスクリプトは、$33番目のフィールドが空でない場合、その行が印刷されることを意味します。

答え2

アッ解決策:

awk -F, '$3!~/^[[:space:]]*$/' file

出力:

x, xx, xxx, xxxx, , , ,

  • -F,- フィールド区切り記号

  • $3!~/^[[:space:]]*$/- 持っている人だけを考慮してください。空ではない3番目のフィールド(スペースなし)

答え3

真珠

perl -ne 'print if /^([^,]*,){2}\h*[^\h,]/' yourcsvfile

最初の 2 つの csv フィールドを見て、2 番目のフィールドの終わりと 3 番目のフィールドの先頭に、少なくとも水平でない空白、カンマ以外のエントリがあることを確認します。一致すればラインが見つかりました。

perl -F, -lane 'print if $F[2] =~ /\S/' yourcsvfile

行をコンマ区切りのフィールドに分割して配列に保存し、3番目のフィールドを見つけて、空白以外の@Fフィールド$F[2]が少なくとも1つあることを確認します\S

sed -e '
   s/,/\n/2;s/,/\n/2
   /\n[[:space:]]*\n/d
   y/\n/,/
' yourfile.csv

3番目のフィールドを改行文字で表示します。その後、2つのタグの間にスペースがある場合、または何もない場合は、=>行が削除されます。 OTWはsedデフォルトでマーキングと印刷パターンスペースを復元します。

関連情報