我有一个文本文件,由字段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过滤器的命令中是否有某种方法可以实现这一点?
答案 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了解版本