Awk
如果 file1 中的值與 file2 中的值不匹配,則 awk 不列印
文件1:
G A 4 H B 3 I C 2 J D 1
文件2:
M H 6 N H 5 O K 4 P J 3 Q I 2 R I 1 S G 0 T L 1
期望:
M H 6 N H 5 P J 3 Q I 2 R I 1 S G 0
僅列印行 $ 2 from file2 matches $ 1 來自文件 1
我正在嘗試構造 if 語句,但它給了我下面的語法錯誤
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {if{a[FNR]==b[FNR]}; {next}; { print }' file1 file2 syntax error at source line 1 context is NR==FNR{a[NR]=$1; b[NR]=$2; next} ; >>> if <<< {a[FNR]==b[FNR]; next}; { print }
或者如果不使用 if 動詞則沒有輸出
awk 'NR==FNR{a[NR]=$1; b[NR]=$2; next} ; {a[FNR]==b[FNR]; next}; { print }' file1 file2
你的程式碼過於復雜了。試試這樣:
$ awk 'NR==FNR{a[$1]; next} $2 in a' file1 file2 M H 6 N H 5 P J 3 Q I 2 R I 1 S G 0
解釋:
- 過濾
NR==FNR
器僅過濾來自 file1 的行,因為對於該文件,總記錄數將與文件記錄數相同- 對於第一個文件的行,我們將第一個欄位 (
$1
) 添加為數組的鍵a
,其中a[$1]
. 然後我們跳過其餘的命令next
- 由於我們呼叫
next
了適用於第一個文件的所有行的第一個塊,因此第二個過濾器$2 in a
僅適用於第二個文件的行。- 過濾器
$2 in a
檢查第二個單詞$2
是否是 array 中的鍵a
。如果鍵存在,則執行預設操作,即列印目前行。