如果字符串没有完全出现三次,则删除行

时间:2014-12-30 10:37:04

标签: csv awk sed

我有一个包含几千行的CSV文件。它看起来像这样:

abc,123,hello,world
abc,124,goodbye,turtles
def,100,apples,pears
....

我希望第一列中的每个唯一条目重复三次。例如:如果恰好三行有" abc"在第一列很好,没有任何反应。但如果没有正好三行" abc"在第一列中,所有行都带有" abc"必须删除第1列中的内容。

abc,123,hello,world
abc,124,goodbye,turtles
abc,167,cat,dog
def,100,apples,pears
def,10,foo,bar
ghi,2,one,two
ghi,6,three,four
ghi,4,five,six
ghi,9,seven,eight

应该成为:

abc,123,hello,world
abc,124,goodbye,turtles
abc,167,cat,dog

非常感谢,

2 个答案:

答案 0 :(得分:5)

这个awk单行应该这样做:

awk -F, 'NR==FNR{a[$1]++;next}a[$1]==3' file file

它不需要对文件进行排序。

答案 1 :(得分:5)

awk方式

awk -F, 'FNR==NR{a[$1]++;next}a[$1]==3' test{,}
  • 将字段分隔符设置为,
  • 虽然是第一个文件

    • 使用字段1作为键增加数组
    • 跳过下一条指令
  • 再次阅读文件

    • 如果数组计数器是3打印