Awk

使用 awk 用另一列中的資訊填充一列

  • August 23, 2022

我有兩個由標籤分隔的文件:

文件 1.txt:

1 KD 
2 LBJ
3 YAO
4 LBJ
5 YAO
6 MJ
7 MJ
8 YAO
9 KD

文件2.txt:

KD 35
LBJ 6
YAO 11
MJ  23

預期輸出:

1 KD 35 
2 LBJ 6
3 YAO 11
4 LBJ 6
5 YAO 11
6 MJ 23
7 MJ 23
8 YAO 11
9 KD 35

感謝您對 awk 的任何幫助。

你可以用 awk 做到這一點:

awk -F'\t' -v OFS='\t' 'NR==FNR{a[$1]=$2;next}{print $0, a[$2]}' file2 file1
1   KD  35  
2   LBJ 6
3   YAO 11
4   LBJ 6
5   YAO 11
6   MJ  23
7   MJ  23
8   YAO 11
9   KD  35

另一種選擇是使用join命令:

join -1 2 -2 1 -o 1.1 1.2 2.2 -t $'\t' <(sort -k2,2 file1) <(sort file2) | sort -n

解釋:

  • -1 2 -2 1告訴join命令將第一個欄位的第二個欄位與第二個文件的第一個欄位連接起來
  • -o 1.1 1.2 2.2這指定了輸出中欄位的順序。點前面的數字是文件號,點後面的數字是文件的欄位號
  • -t $'\t'指定分隔符是製表符
  • <(sort -k2,2 file1) <(sort file2)按要加入的欄位對文件進行排序。該join命令要求對文件進行排序。
  • | sort -n對輸出文件進行排序

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