我的文件有行,其中两个字段用空格分隔:
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行?
或者有更好的方法吗?
由于
答案 0 :(得分:1)
以下是使用awk
的一个想法:
awk -v maxlines=<N> ' ++count[$2] <= maxlines { print } '
这不需要对文件进行排序(但如果还有其他原因,您仍可以先对其进行排序。)。
答案 1 :(得分:1)
不,你对前置不太正确。
prepend
告诉uniq
在每个重复项之前打印一个空白文件。请记住,通过添加--all-repeated
选项,您告诉uniq
仅打印具有重复项的行,即那些多次出现的行。它不会打印出完全一次的行,就像uniq -f1
那样。
例如,如果您在文件中添加另一行,例如fieldA fieldZ
,如果您有--all-repeated
选项,则不会输出该行,因为它只出现在文件中一次。