Awk
比較兩個文件的第一列,如果第一列匹配,則列印第二個文件的整行
我有兩個這些格式的文件:
文件 1:
air smell hand dude road cat
文件 2:
air,4,21,01,13,3,2 smell,21,4,2,5,6 dude,1,31,42,1 road,1,4,2,1,4 cat,1,5,6,3,1 hand,1,4,2,1,6 mouse,1,3,5,6,2
我想要做的是列印文件 2 的整行,如果在文件 1 中找到文件 2 的第 1 列中的第一個字元串,並且我想保持文件 1 的順序。
預期輸出:
air,4,21,01,13,3,2 smell,21,4,2,5,6 hand,1,4,2,1,6 dude,1,31,42,1 road,1,4,2,1,4 cat,1,5,6,3,1
這應該這樣做:
awk -F, 'FNR==NR {a[$1]; next}; $1 in a' file1 file2
編輯:
為訂購解釋了錯誤的文件。新的嘗試(
gawk
如果可以接受,則需要)gawk -F, ' FNR==NR {a[NR]=$1; next}; {b[$1]=$0} END{for (i in a) if (a[i] in b) print b[a[i]]} ' file1 file2
編輯2:
使用 nowmal
awk
並交換文件:awk -F, 'FNR==NR {a[$1]=$0; next}; $1 in a {print a[$1]}' file2 file1
join -t, -1 2 -2 1 <(nl -s, -ba -nrz file1 | sort -t, -k2) \ <(sort -t, -k1 file2) | sort -t, -k2 | cut -d, -f1,3-
中的行
file1
已編號,結果sort
在第二個欄位中。然後join
用file2
(sort
ed on 1st field) 編輯:air,000001,4,21,01,13,3,2 cat,000006,1,5,6,3,1 dude,000004,1,31,42,1 hand,000003,1,4,2,1,6 road,000005,1,4,2,1,4 smell,000002,21,4,2,5,6
然後
sort
在第二個欄位(即行號)上編輯結果以恢復原始行順序,然後刪除相同的第二個欄位cut
:air,4,21,01,13,3,2 smell,21,4,2,5,6 hand,1,4,2,1,6 dude,1,31,42,1 road,1,4,2,1,4 cat,1,5,6,3,1