CSVで5番目のフィールドが空の行を印刷する方法

CSVで5番目のフィールドが空の行を印刷する方法

CSVファイルの5番目のフィールドが空であることを確認する必要があります。これは私のファイルです:

1,abc,543,87,DATA,fsg; 
1,abc,543,87,,fsg; 
1,abc,543,87,DATA,fsg; 
1,abc,543,88,,fsg; 
1,abc,543,,DATA,fsg; 

ご覧のとおり、2行目と4行目には5番目のフィールドが空です。この行をすべて印刷したいです。

結果は次のようになります。

1,abc,543,87,,fsg;
1,abc,543,87,,fsg; 

答え1

その他awk:

$ awk -F, '!length($5)' file
1,abc,543,87,,fsg; 
1,abc,543,88,,fsg;

答え2

オプションを使用して別のフィールド区切り文字(デフォルトは空白)を使用してから、5番目の列が空である-Fことを確認できます。

awk -F',' '{if($5==""){print $0}' myfile

またはもっと簡潔に言えば:

awk -F, '$5==""' myfile

-

sed コマンドを使用します。

sed -n '/,,[^,]*$/p' myfile

-n一致しない限り()を印刷しないでください。/,,[^,]*$/つまり、(5番目のフィールドは空です)+ 6番目のフィールドは(=カンマ以外のすべての項目)...$で終わります。フィールドが6つを超えると、コマンドは期待どおりに機能しません。,,,[^,]

答え3

簡単なものでawk十分です。

awk -F, '$5==""' your_file

説明する

  • ,フィールド区切り文字が(-F ,)に設定されています。
  • 基本的な作業は、awk現在のレコードを印刷することです。 5番目のフィールドが空の場合にのみこれが発生することを確認してください($5 == "")。

答え4

awk次のコマンドを使用できます。

$ awk '/^(.*,){4},.*/' filename
1,abc,543,87,,fsg;
1,abc,543,88,,fsg;

正規表現はランダムな文字の後に,4回来、次の文字は別の文字,(5番目の空白フィールド)でなければならず、その後に何も来るべきかどうかをテストします。

関連情報