Awk

從兩個文件中查找給定列中的共同元素,並從每個文件中輸出列值

  • April 23, 2020

我有兩個帶有製表符分隔值的文件,如下所示:

文件1:

A    1
B    3
C    1
D    4

文件2:

E    1
B    3
C    2
A    9

我想在第 1 列中的字元串相同的文件 1 和 2 之間找到行,然後獲取相應的值。所需的輸出是一個如下所示的文件:

B    3    3
C    1    2
A    1    9

這可以用 Unix 單線來完成嗎?

如果結果中的行排序無關緊要, GNU coreutils 包含的命令join完全符合您的要求:

join <(sort file1) <(sort file2)

A 1 9
B 3 3
C 1 2

如果您想要返回標籤,請執行以下操作:

join <(sort file1) <(sort file2) | tr ' ' '\t'

A   1   9
B   3   3
C   1   2

或使用t選項來join.

<()又名程序替換,需要 ksh93(該功能的來源)、bash 或 zsh)

ire@localhost: sort -k1 file2 | join file1 -
A 1 9
B 3 3
C 1 2

如果您想要輸出中的選項卡,請執行

sort -k1 file2 | join -t "        " file1 -

您可以在其中通過按 CTRL-V 在引號內構造選項卡<tab>

引用自:https://unix.stackexchange.com/questions/52862