如何在 CSV 中打印第五个字段为空白的行

如何在 CSV 中打印第五个字段为空白的行

我必须检查 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;

正则表达式测试任何字符后跟,四次,然后下一个字符必须是另一个,(第五个空白字段),后跟任何内容。

相关内容