Awk

awk 從 file1 帶來相同的欄位值並在 file2 中設置

  • May 20, 2022

文件 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為我們提供了第二個文件中的第一個和第二個欄位,然後是第一個文件中的第三個欄位。

引用自:https://unix.stackexchange.com/questions/703286