我想看看我的第二列中的哪个字符串是重复的。
例如:
a apple
b peach
c grape
d peach
e peach
f apple我的输出将是:
a apple
f apple
b peach
d peach
e peach显示在第二列中具有公共字符串的整行。
发布于 2014-10-08 22:54:04
如果您不想将所有文件都存储在内存中,最好的方法是读取该文件两次。
$ awk 'FNR==NR {a[$2]++; next} a[$2]>1' file file
a apple
b peach
d peach
e peach
f apple作为Jonathan Leffler suggests,要再现您得到的确切输出,只需通过管道连接到sort,指示它应该首先按第2列排序,然后按第1列排序:
awk 'FNR==NR {a[$2]++; next} a[$2]>1' file file | sort -k2,2 -k1发布于 2014-10-08 23:40:40
一个不会两次读取文件的perl解决方案:
perl -lane 'push @{$s{$F[1]}},$_;
END{
do{print join "\n", @{$s{$_}} if scalar(@{$s{$_}})>1}for(%s)
}' file这将遍历整个文件,并将每一行保存在一个散列中,散列的关键字是第2个字段,值是行列表。然后,在最后,它将打印其关键字多次出现的列表。
发布于 2014-10-09 00:26:37
使用GNU awk实现真正的2D数组:
gawk '
{ vals[$2][++cnt[$2]] = $0 }
END {
for (fruit in vals)
if (cnt[fruit] > 1)
for (i=1; i<=cnt[fruit]; i++)
print vals[fruit][i]
}
' file
a apple
f apple
b peach
d peach
e peachhttps://stackoverflow.com/questions/26259931
复制相似问题