Linux
比較兩個文本文件的第二列,如果匹配則列印兩個文件的第一列
我正在嘗試比較兩個文本文件的第二列,如果匹配則列印兩個文件的第一列。
我嘗試了以下
awk
程式碼,但沒有用1) awk 'NR==FNR {a[$2]=$2; next} {print $1,a[$1]}' nid8.txt nid9.txt 2) awk 'NR==FNR {a[$2]=$2; next} {print $1, $1 in a}' nid8.txt nid9.txt
範例文件:
nid8.txt:
1000 500 1001 501 1002 502 1003 503 1004 504 1005 505
nid9.txt:
2000 504 2001 502 2002 508 2003 505 2004 500 2005 501
輸出:
1000 2004 1001 2005 1002 2001 1004 2000 1005 2003
你可以
join
在這裡使用:join -j 2 -o 1.1 2.1 <(sort -nk2,2 nid8.txt) <(sort -nk2,2 nid9.txt)
使用兩個文件上的第二個欄位
-j 2
作為鍵。並
-o
輸入這些欄位:第一個文件中的
1.1
第一個欄位第二個文件中的第一個欄位
2.1
join
需要對輸入文件進行排序,因此我們在第二個欄位上對它們進行排序,該欄位將用作數字鍵sort -nk2,2 input
。使用
awk
which 不需要對輸入進行排序,而是將第一個輸入文件載入到記憶體中:awk '!second_file{ my_array[$2]=$1; next } ($2 in my_array) { print $1, my_array[$2] }' nid8.txt second_file=1 nid9.txt
my_array[$2]=$1
我們只保存第一個輸入文件nid8.txt的第一列, 其中鍵是同一第一個文件的第二列,直到second_file
變數值未設置為1,這導致!second_file
表達式值評估為 false 並且不會在下一個執行該塊輸入。在
($2 in my_array)
條件下,我們檢查數組my_array中是否存在第二個欄位,如果存在,則列印第一個欄位(來自第二個文件)以及包含第一個文件中第一個欄位的$1
相同鍵的值my_array[$2]
用同樣的鑰匙。