Awk
awk 從 file1 帶來相同的欄位值並在 file2 中設置
文件 1(父)
2210 1110 Earth 2211 1111 Marse 2212 1112 Saturn 2213 1113 Pluto
文件 2(子)
3310 2210 Earth 3311 2210 Space 3312 2211 Mars 3313 2211 Space 3314 2212 Saturn 3315 2212 Space 3316 2213 Pluto 3317 2213 Space
期望的
3310 2210 Earth 3311 2210 Earth 3312 2211 Mars 3313 2211 Mars 3314 2212 Saturn 3315 2212 Saturn 3316 2213 Pluto 3317 2213 Pluto
所以它應該比較 $ 2 of file2 with $ 文件1的1,然後設置值 $ 3 in file2 same as $ 3 來自文件 2
$ awk 'FNR==NR {planet[$1]=$3; next} {$3=planet[$2]; print}' file1 file2 3310 2210 Earth 3311 2210 Earth 3312 2211 Marse 3313 2211 Marse 3314 2212 Saturn 3315 2212 Saturn 3316 2213 Pluto 3317 2213 Pluto
FNR==NR
是一個awk
成語,意思是“解析第一個文件時”。有必要結束此條件的操作,next
以避免執行第一個文件的剩餘程式碼。- 行星欄位儲存在雜湊數組中,在讀取第二個文件期間,我們將其分配給最後一個欄位。
假設文件都在連接欄位(中的第一個欄位
file1
和 中的第二個欄位file2
)按字典順序排序:$ join -1 1 -2 2 -o 2.1,2.2,1.3 file1 file2 3310 2210 Earth 3311 2210 Earth 3312 2211 Marse 3313 2211 Marse 3314 2212 Saturn 3315 2212 Saturn 3316 2213 Pluto 3317 2213 Pluto
這將使用第一個文件的第一個欄位和第二個文件的第二個欄位 (
-1 1 -2 2
) 在兩個文件之間執行關係 JOIN 操作。輸出是使用-o
選項指定的,在上面的命令中,2.1,2.2,1.3
為我們提供了第二個文件中的第一個和第二個欄位,然後是第一個文件中的第三個欄位。