如何使用egrep或awk在一行中包含超过5个逗号的文件中显示行

时间:2016-02-12 05:21:06

标签: perl shell awk grep

我的行格式如下:

enter image description here

需要帮助才能在单独的文件中显示一行中包含5个以上逗号的行。

4 个答案:

答案 0 :(得分:1)

perl有一个tr(翻译)运算符,它返回发生的翻译数。我们可以使用它来计算字符串中的子字符串。

cat file.txt | perl -ne 'print if tr/,// > 5'

答案 1 :(得分:0)

使用egrep:

egrep '([^,]*,){6,}'

使用awk:

awk -F, 'NF>5{print}'

使用带有"扩展正则表达式选项的sed" (我假设-r在这里,但可能是-E):

sed -n -r -e '/([^,]*,){6,}/p'

当然,你要小心你所要求的。例如,如果您有一个CSV文件,其中的逗号嵌入在"值"中,如果您只想要超过五个"值"的行,那么对于那些工具来说,事情会变得有点棘手不支持CSV。

答案 2 :(得分:0)

图片中的文字看起来像CSV。 然后,使用AWK ......

awk -F'","' 'NF>5{print}'
像峰值的答案一样。

答案 3 :(得分:0)

我想你已经在这里找到了原始问题的答案。但是,如果你真正想问的是,如果你想找到多少行字段超过5的行,那么我认为你需要像Perl {{1}这样的东西。 }模块。

这方面的一个例子是以下字符串:

Text::CSV

这有六个逗号,但只有五个字段。你想看到这一行,还是想跳过它?如果你想看到它(作为一个例外 - 一个包含五个以上逗号的行),那么使用已建议的方法之一。

如果你没有,那么你真的想要一个CSV解析器,而且Perl的功能非常好 - 在我看来,它比大多数语言更轻巧,更容易:

one,two,three,four,five,"six,seven"