awk を使用して、ある列に別の列の情報を入力します。

awk を使用して、ある列に別の列の情報を入力します。

2つのタブで区切られたファイルがあります。

ファイル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のお手伝いをいただきありがとうございます。

答え1

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 1join最初のファイルの2番目のフィールドを2番目のファイルの1番目のフィールドに関連付けるようにコマンドに指示します。
  • -o 1.1 1.2 2.2これは出力のフィールド順序を指定します。ドットの前の数字はファイル番号、ドットの後の数字はファイルのフィールド番号です。
  • -t $'\t'区切り記号をタブとして指定
  • <(sort -k2,2 file1) <(sort file2)結合するフィールドごとにファイルを並べ替えます。このjoinコマンドを使用するには、ファイルをソートする必要があります。
  • | sort -n出力ファイルのソート

関連情報