コマンドラインで csv ファイルからスペース文字を含むフィールドをフィルタリングする

コマンドラインで csv ファイルからスペース文字を含むフィールドをフィルタリングする

複数のレコードを含む csv ファイルは で区切られます|

field1|field2|field3|field4|field5

フィールド 3 が空白か、または「スペース」文字のみが含まれているかどうかを確認します。空白またはスペースの場合は、行全体が表示されます。

答え1

$ echo "1|2||4" | awk  -F'|' '$3 ~ /^[ \t]*$/   {print $0}'

1|2||4

$ echo "1|2|  |4" | awk  -F'|' '$3 ~ /^[ \t]*$/   {print $0}'

1|2|  |4

$ echo "1|2|  3|4" | awk  -F'|' '$3 ~ /^[ \t]*$/   {print $0}'

答え2

また、cut コマンドを使用して 3 番目のフィールドを抽出し、その値をテストすることもできます。

$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3
field3

答え3

私がランダムに試してみたのはgrep次のようになります:

grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file

答え4

Perl の使用:

perl -F'\|' -lane 'print if $F[2] !~ /\S/' file

-a自動分割モードをオンにして、フィールドを配列に分割し、@F
-F'\|'フィールド区切り文字を|
$F[2]3 番目のフィールドに設定して
!~ /\S/、スペース以外の文字 (または空) をテストします。

関連情報