這必須是您輕鬆比較兩個文件使用awk或sed的
這裏是文件1(一列)
1
2
3
4
5
6
7
8
9
,這裏是文件2(兩列)
2 yay
3 ups
4 wow
8 hey
有必須是一個簡單的單行程序,用於打印出與文件2不匹配的文件1中的行
這必須是您輕鬆比較兩個文件使用awk或sed的
這裏是文件1(一列)
1
2
3
4
5
6
7
8
9
,這裏是文件2(兩列)
2 yay
3 ups
4 wow
8 hey
有必須是一個簡單的單行程序,用於打印出與文件2不匹配的文件1中的行
awk 'NR==FNR{a[$1]++;next;}!($0 in a)' file2 file1
,或者使用與-v加盟,作爲@邁克爾建議:
join -v1 file1 file2
都將打印:
1
5
6
7
9
你能解釋一下你的awk單線程+1嗎? :) –
@Jaypal awk在數組中保存file2,索引是field1;那麼對於file1中的每一行,檢查它是否是數組的索引,以進行比較。 ++沒什麼特別的,但爲元素設置了一個值。一個[$ 1] = 1;也起作用。但++鍵入更快。 :) – Kent
您可以通過將cut
和comm
:
cut -d' ' -f1 file2 | comm -13 - file1
您也可以考慮join
,這取決於你想如何處理重複行。
這SED解決方案可能會爲你工作:
{ seq 1 10; echo -e "2 yay\n3 ups\n4 wow\n8 hey"; } | sort -n |
sed '1{h;d};H;${x;s/\(\S\+\)\n\1[^\n]*\n//g;p};d'
1
5
6
7
9
10
說明:對文件進行數字排序,然後使用sed
將文件吸入保留空間(HS)。在文件交換到HS的末尾,然後使用重複鍵刪除行。
請注意,'join'和'comm'解決方案需要對輸入文件進行排序,他們碰巧遇到了這個問題。 awk解決方案不關心如果沒有排序。 –