我有兩個文件,其中第一列可能具有相同的值。我想匹配這兩個文件的第一列,並打印出匹配的FILE1中的行。匹配來自兩個文件的列
FILE1:
xxx1 yyy yyy yyy
xxx2 yyy yyy yyy
xxx3 yyy yyy yyy
FILE2:
xxx3 zzzz
xxx4 zzzz
OUTPUT:
xxx3 yyy yyy yyy
歡迎任何建議。
最良好的祝願
我有兩個文件,其中第一列可能具有相同的值。我想匹配這兩個文件的第一列,並打印出匹配的FILE1中的行。匹配來自兩個文件的列
FILE1:
xxx1 yyy yyy yyy
xxx2 yyy yyy yyy
xxx3 yyy yyy yyy
FILE2:
xxx3 zzzz
xxx4 zzzz
OUTPUT:
xxx3 yyy yyy yyy
歡迎任何建議。
最良好的祝願
awk 'FNR==NR{ a[$1]=$0;next } ($1 in a)' file2 file1
@ghostdog ....你能解釋一下這是如何工作的。 – Vijay 2010-06-22 05:58:27
'FNR == NR'是一個awk「成語」,用於將輸入參數中第一個文件的記錄從awk中獲取。使用關聯數組來收集第一列作爲關鍵字。值是整個記錄。然後,當awk處理第二個文件時,它會比較第一個字段和數組「a」中的鍵,如果它存在,則打印出值 – ghostdog74 2010-06-22 07:08:20
這裏是我的食譜:
awk 'key[$1]; FNR==NR {key[$1]=1}' file2 file1
我假定這兩個名單是關鍵(第一列)排序,每個鍵只出現一次在一個文件中。第一種模式簡稱:
key[$1] != 0
在這種情況下,默認操作是打印整行。這種模式隱含地適用於第二個文件(file1),這是因爲對於第一個文件,密鑰沒有被標記。 在第二圖案:
FNR==NR {key[$1]=1}
的FNR == NR意味着我們正在處理的第一文件(文件2在這種情況下)。在這種情況下,我們標記該鍵以供以後參考。
或者,更明確一點:'加入FILE1 FILE2' – 2010-06-21 14:19:16
一個重要的注意事項 - 兩個文件都必須進行排序。 – 2010-06-21 21:41:20