2010-06-21 108 views
0

我有兩個文件,其中第一列可能具有相同的值。我想匹配這兩個文件的第一列,並打印出匹配的FILE1中的行。匹配來自兩個文件的列

FILE1: 
xxx1 yyy yyy yyy 
xxx2 yyy yyy yyy 
xxx3 yyy yyy yyy 

FILE2: 
xxx3 zzzz 
xxx4 zzzz 

OUTPUT: 
xxx3 yyy yyy yyy 

歡迎任何建議。

最良好的祝願

回答

3
+0

或者,更明確一點:'加入FILE1 FILE2' – 2010-06-21 14:19:16

+1

一個重要的注意事項 - 兩個文件都必須進行排序。 – 2010-06-21 21:41:20

1
awk 'FNR==NR{ a[$1]=$0;next } ($1 in a)' file2 file1 
+0

@ghostdog ....你能解釋一下這是如何工作的。 – Vijay 2010-06-22 05:58:27

+0

'FNR == NR'是一個awk「成語」,用於將輸入參數中第一個文件的記錄從awk中獲取。使用關聯數組來收集第一列作爲關鍵字。值是整個記錄。然後,當awk處理第二個文件時,它會比較第一個字段和數組「a」中的鍵,如果它存在,則打印出值 – ghostdog74 2010-06-22 07:08:20

1

這裏是我的食譜:

awk 'key[$1]; FNR==NR {key[$1]=1}' file2 file1 

我假定這兩個名單是關鍵(第一列)排序,每個鍵只出現一次在一個文件中。第一種模式簡稱:

key[$1] != 0 

在這種情況下,默認操作是打印整行。這種模式隱含地適用於第二個文件(file1),這是因爲對於第一個文件,密鑰沒有被標記。 在第二圖案:

FNR==NR {key[$1]=1} 

的FNR == NR意味着我們正在處理的第一文件(文件2在這種情況下)。在這種情況下,我們標記該鍵以供以後參考。