0

我有一个文本文件,其中包含字段 1 中的可变长度键字段和字段 2 中的其他数据。这些字段由制表符 ("\t") 分隔。关键字段包含空格。文件按关键字段排序。

我想对此进行过滤以创建一个文件,该文件仅包含具有重复键字段(即字段 1)的那些记录,另外还可以使用空行分隔记录组。

例如

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

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

有没有办法在使用现成的 Unix 过滤器的命令中完成这个?

4

1 回答 1

0

按照 olivier 的建议尝试 awk,如果在 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 

更难理解的版本

于 2013-01-09T22:11:26.073 回答