在命令行上从 csv 文件中过滤带有空格字符的字段

在命令行上从 csv 文件中过滤带有空格字符的字段

包含多个记录的 csv 文件以 分隔|

field1|field2|field3|field4|field5

我想检查 field3 是否为空白或仅包含“空格”字符。如果为空白或空格,则应显示整行。

答案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 命令拉出第三个字段,然后测试该值:

$ 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]第三个字段,
!~ /\S/测试非空格字符(或为空)

相关内容