如何根据第二列中的数字将文件 1 中的第一列与文件 2 匹配?
k002 25
k004 54
k003 23
Run Code Online (Sandbox Code Playgroud)
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)
你也许可以做这样的事情:
awk 'NR == FNR { x[$2]=$1; next} { print x[$1], $0 }' file1 file2
Run Code Online (Sandbox Code Playgroud)
在哪里:
FNR
: 当前输入文件中的输入记录号。NR
:目前看到的输入记录总数。请注意,这会将整个读file1
入内存。
如果您不关心保留原始文件顺序,您可以使用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)