使用 awk 用另一列的信息填充一列

Wil*_*n D 3 awk

我有两个由制表符\xef\xbc\x9a 分隔的文件

\n

文件1.txt:

\n
1 KD \n2 LBJ\n3 YAO\n4 LBJ\n5 YAO\n6 MJ\n7 MJ\n8 YAO\n9 KD\n
Run Code Online (Sandbox Code Playgroud)\n

文件2.txt:

\n
KD 35\nLBJ 6\nYAO 11\nMJ  23\n
Run Code Online (Sandbox Code Playgroud)\n

预期输出:

\n
1 KD 35 \n2 LBJ 6\n3 YAO 11\n4 LBJ 6\n5 YAO 11\n6 MJ 23\n7 MJ 23\n8 YAO 11\n9 KD 35\n
Run Code Online (Sandbox Code Playgroud)\n

对 awk 的任何帮助表示赞赏。

\n

use*_*001 7

你可以用 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
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用join命令:

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

解释:

  • -1 2 -2 1告诉join命令将第一个文件的第二个字段与第二个文件的第一个字段连接起来
  • -o 1.1 1.2 2.2这指定输出中字段的顺序。点之前的数字是文件号,点之后的数字是文件的字段号
  • -t $'\t'指定分隔符为制表符
  • <(sort -k2,2 file1) <(sort file2)按要连接的字段对文件进行排序。该join命令要求对文件进行排序。
  • | sort -n对输出文件进行排序