我必须检查 CSV 文件中的第五个字段是否为空。这是我的文件:
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;
正如您所看到的,第二行和第四行有一个空的第五字段。我想打印所有这些行。
结果应该是这样的:
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
您可以使用该选项使用不同的字段分隔符(默认为空格)-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 == ""
)
答案4
您可以使用awk
命令:
$ awk '/^(.*,){4},.*/' filename
1,abc,543,87,,fsg;
1,abc,543,88,,fsg;
正则表达式测试任何字符后跟,
四次,然后下一个字符必须是另一个,
(第五个空白字段),后跟任何内容。