0

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

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. 我是否正确理解 prepend 应该只在唯一块之前添加空行?

还是有更好的方法?

谢谢

4

2 回答 2

1

这是使用的一个想法awk

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

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

于 2013-04-05T16:32:36.073 回答
1

不,您对 prepend 不太正确。

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

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

于 2013-04-05T16:35:56.710 回答