如何将一列添加到与另一列匹配的文件中?

Ele*_*reg 2 awk

如何根据第二列中的数字将文件 1 中的第一列与文件 2 匹配?

文件文件 1

k002  25
k004  54
k003  23
Run Code Online (Sandbox Code Playgroud)

档案文件2

25 h
23 j
54 hg
Run Code Online (Sandbox Code Playgroud)

期望输出

k002 25 h
k003 23 j
k004 54 hg
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做,也没有找到类似的问题。

awk 'matching {print ... $1, $2}' file1 file2 > file_des
Run Code Online (Sandbox Code Playgroud)

ibu*_*fen 5

你也许可以做这样的事情:

awk 'NR == FNR { x[$2]=$1; next} { print x[$1], $0 }' file1 file2
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • FNR: 当前输入文件中的输入记录号。
  • NR :目前看到的输入记录总数。

请注意,这会将整个读file1入内存。


Dan*_*ini 5

如果您不关心保留原始文件顺序,您可以使用join

# sort the first file:
sort -k2 file1 > nfile1

# Sort the second file:
sort file2 > nfile2

join -1 2 -2 1 -o 1.1,1.2,2.2 nfile1 nfile2 > joined_file
Run Code Online (Sandbox Code Playgroud)

或者按照@Ed Morton 的建议,如果您使用bash或任何其他支持进程阻塞的 shell,您可以避免以这种方式创建临时文件:

join -1 2 -2 1 -o 1.1,1.2,2.2 <(sort -k2 file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)