根据第一列的两个文件的交集

wen*_*nzi 7 shell scripting text-processing columns join

我在文件 A 中有两个文件,另一个文件 B 中有序列号,有很多列,第一列是序列号,我想得到一个文件,其中包含 B 中的所有行,其中的序列号在我怎样才能做到这一点?谢谢

像文件A

1
3
8
9
20
Run Code Online (Sandbox Code Playgroud)

文件B

1 kfjk 3243424
2 fkdkf 23543592
3 iefjk 21493402
7 dlafdl 23435231
8 kfkdlkf 309834
Run Code Online (Sandbox Code Playgroud)

Ulr*_*arz 11

你想要join (1),我猜:

对于具有相同连接字段的每对输入行,向标准输出写入一行。默认连接字段是第一个,由空格分隔。当 FILE1 或 FILE2(不是两者)为 - 时,读取标准输入。

[0 1075 12:50:10] ~/temp/sx % join A B
1 kfjk 3243424
3 iefjk 21493402
8 kfkdlkf 309834
join: file 1 is not in sorted order
Run Code Online (Sandbox Code Playgroud)

好的,显然您需要将其与sort (1)按 alpha 值排序(不是数值,所以 20 < 3)结合起来

join <(sort A) <(sort B)对我有用,但这看起来很奇怪,可能是 zsh 扩展。这样做没有坏处

sort A > A.tmp; sort B > B.tmp; join A.tmp B.tmp
Run Code Online (Sandbox Code Playgroud)

(像往常一样,检查手册页是否有陷阱。)

  • 进程替换(`join &lt;(sort A) &lt;(sort B)`)在 bash 中工作得很好:-) (2认同)