Michael Ellick Ang Asked: 2009-07-09 13:48:21 +0800 CST2009-07-09 13:48:21 +0800 CST 2009-07-09 13:48:21 +0800 CST 在命令行上从 csv 文件中过滤带有空格字符的字段 772 具有多条记录的 csv 文件由 . 分隔|。 field1|field2|field3|field4|field5 我想检查 field3 是否为空白或仅包含“空格”字符。如果它是空白或空格,则应显示整行。 unix command-line-interface csv 5 个回答 Voted Best Answer James 2009-07-09T14:04:43+08:002009-07-09T14:04:43+08:00 $ 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}' Chad Huneycutt 2009-07-09T15:11:52+08:002009-07-09T15:11:52+08:00 也可以使用 cut 命令拉出第三个字段,然后测试值: $ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3 field3 JMusgrove 2009-07-09T15:21:11+08:002009-07-09T15:21:11+08:00 我的随机尝试grep是: grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file Tedd Johnson 2009-07-09T13:57:25+08:002009-07-09T13:57:25+08:00 我不确定 unix,但在 linux 中你会想要使用 sed 命令。 sed 's/||/\n/g' 会这样,如果有任何空白字段,它将添加一个新行。不确定如何让它只检查第三个字段。sed 的/| |/\n/g' 应该只适用于空格。 Chris Koknat 2015-12-03T17:23:43+08:002015-12-03T17:23:43+08:00 使用 Perl: perl -F'\|' -lane 'print if $F[2] !~ /\S/' file -a打开自动拆分模式,将字段拆分为数组@F -F'\|'将字段分隔符设置为非空格字符(或空字符)| $F[2]的第三个字段测试 !~ /\S/
也可以使用 cut 命令拉出第三个字段,然后测试值:
我的随机尝试
grep
是:我不确定 unix,但在 linux 中你会想要使用 sed 命令。
sed 's/||/\n/g' 会这样,如果有任何空白字段,它将添加一个新行。不确定如何让它只检查第三个字段。sed 的/| |/\n/g' 应该只适用于空格。
使用 Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a
打开自动拆分模式,将字段拆分为数组@F
-F'\|'
将字段分隔符设置为非空格字符(或空字符)|
$F[2]
的第三个字段测试!~ /\S/