获得前N次出现的唯一行,而不仅仅是一行

时间:2013-04-05 16:07:40

标签: bash uniq

我的文件有行,其中两个字段用空格分隔:

fieldA fieldX
fieldB fieldX
fieldC fieldX
fieldD fieldX
fieldE fieldX
fieldA fieldY
fieldB fieldY
fieldC fieldY

我需要在第二列中获得前N行类型。我做的是 sort -k2 | uniq -f1 --all-repeated=prepend | grep "^$" -A3 哪个应该有效但是uniq -f1给了我不同于uniq -f1 --all-repeated=prepend的东西。我是否正确理解前置应该只在唯一的块之前添加emtpy行?

或者有更好的方法吗?

由于

2 个答案:

答案 0 :(得分:1)

以下是使用awk的一个想法:

awk -v maxlines=<N> ' ++count[$2] <= maxlines { print } '

这不需要对文件进行排序(但如果还有其他原因,您仍可以先对其进行排序。)。

答案 1 :(得分:1)

不,你对前置不太正确。

prepend告诉uniq在每个重复项之前打印一个空白文件。请记住,通过添加--all-repeated选项,您告诉uniq仅打印具有重复项的行,即那些多次出现的行。它不会打印出完全一次的行,就像uniq -f1那样。

例如,如果您在文件中添加另一行,例如fieldA fieldZ,如果您有--all-repeated选项,则不会输出该行,因为它只出现在文件中一次。