我想查看我的列2中的哪個字符串重複。檢查某列中的哪個字符串重複
例如:
a apple
b peach
c grape
d peach
e peach
f apple
我的輸出將是:
a apple
f apple
b peach
d peach
e peach
顯示具有上第二列的子串的整行。
我想查看我的列2中的哪個字符串重複。檢查某列中的哪個字符串重複
例如:
a apple
b peach
c grape
d peach
e peach
f apple
我的輸出將是:
a apple
f apple
b peach
d peach
e peach
顯示具有上第二列的子串的整行。
如果您不想將所有文件存儲在內存中,最好的辦法是兩次讀取文件。
$ 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
即沒有按」 A perl的溶液T上讀兩次文件:
perl -lane 'push @{$s{$F[1]}},$_;
END{
do{print join "\n", @{$s{$_}} if scalar(@{$s{$_}})>1}for(%s)
}' file
這又通過文件,並保持各行中的哈希,其關鍵是2ST場和衛生組織e值是行列表。然後,最後,它將打印出鍵不止一次出現的列表。
隨着GNU AWK真正的二維數組:
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
+1雖然我們之間吹毛求疵可能會注意到,原來的輸出具有鄰近列出輸出對方所有的蘋果,和所有的桃子了。通過在第二列對腳本的輸出進行排序,可能會最容易解決這個問題:'| sort -k2'或者可能是'| sort -k2,2 -k1'。如果這些文件足夠小以適應內存,那麼它也可以在'awk'中完成,如果它們不足夠,則更容易。 – 2014-10-08 14:58:52
@JonathanLeffler非常真實。我剛剛更新了您的「排序」建議。我傾向於喜歡用管道工具來處理最好的東西,所以在這種情況下,我認爲用'|來排序是一個完美的選擇排序:) – fedorqui 2014-10-08 15:08:30