Awk
從兩個文件中查找給定列中的共同元素,並從每個文件中輸出列值
我有兩個帶有製表符分隔值的文件,如下所示:
文件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>
。