在Unix中提取带有重复字段的记录(不使用uniq!)

时间:2013-01-09 19:11:14

标签: unix uniq

我有一个文本文件,由字段1中的可变长度键字段和字段2中的其他数据组成。字段由制表符(“\ t”)分隔。关键字段包含空格。该文件在关键字段上排序。

我想过滤这个来创建一个只包含重复关键字段(即字段1)的记录的文件,还有一个很好的方法就是用空行分隔记录组。

e.g。

01001|XYZ ZY|\tFOO MAN CHU\n
01001|XYZ ZY|\tBAR BAZ\n

01001|ZZZYYYXX|\tYACKETY YACK\n
01001|ZZZYYYXX|\tBOBBITY BOP\n
01001|ZZZYYYXX|\tTESTING TESTING\n

...等。换句话说,如果它为备用字段分隔符或可变长度字段提供了任何选项,那么uniq -d -D将会做什么!

在使用现成的Unix过滤器的命令中是否有某种方法可以实现这一点?

1 个答案:

答案 0 :(得分:0)

尝试awk,因为olivier建议,如果在solaris上使用nawk:

awk -F '    '  '{arr[$1]++; next} 
               END{for(i in arr)
                   {if(arr[i]>1) {print i}}  } ' infile > keyfile 

awk -F '    '  'FILENAME=="keyfile" {arr[$1]=1;next}
              FILENAME=="infile"  
                   {if( $1 in arr){print $0}} ' keyfile infile > newfile

这可以缩短,但对于一个awk新手来说会更加困惑。 -F''< - 在''。

之间有一个制表符
awk -F '    '  'NR==FNR {arr[$1]++; next}                                  
              (NR>FNR && arr[$1]>1) {print} '   infile infile > newfile 

Nastier了解版本