我希望看到第2列中的哪个字符串重复。
例如:
a apple
b peach
c grape
d peach
e peach
f apple
我的输出是:
a apple
f apple
b peach
d peach
e peach
显示第二列上具有公共字符串的整行。
答案 0 :(得分:3)
如果您不想将所有文件存储在内存中,最好是两次读取文件。
$ 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
答案 1 :(得分:0)
没有两次读取文件的perl解决方案:
perl -lane 'push @{$s{$F[1]}},$_;
END{
do{print join "\n", @{$s{$_}} if scalar(@{$s{$_}})>1}for(%s)
}' file
这会遍历文件,并将每一行保留在哈希中,该哈希的键是第2个字段,其值是行列表。然后,最后,它将打印不止一次看到其键的列表。
答案 2 :(得分:0)
使用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 peach