如何基于linux中的键列组合两个文件的内容

时间:2014-09-18 14:56:28

标签: linux awk

我有两个文件,其中3列相同,第4列不同。

档案A

a b c 100
e f g 50
h i j 25

文件B

a b c 200
e f g 20
h i j 15

文件AB如何组合成文件C

文件C

a b c 100 200
e f g 50 20
h i j 25 15

- UPDATE -

我使用了Jotne和Kent提供的解决方案,但两个脚本的输出都有。 (点)而不是逗号。它看起来像

  a,b,c,100.200 
  e,f,g,50.20 

2 个答案:

答案 0 :(得分:2)

这是一个awk

awk 'FNR==NR {a[$1,$2,$3]=$4;next} {print $0,a[$1,$2,$3]}' B A > C
cat C
a b c 100 200
e f g 50 20
h i j 25 15

答案 1 :(得分:0)

如果他们只有一个共同的列,join可以成功。但是让我们使用它然后解析输出:

$ join <(sort f1) <(sort f2)
a b c 100 b c 200
e f g 50 f g 20
h i j 25 i j 15

这是基于第一列加入的。现在,让我们使用cut获取除第5和第6列之外的所有内容:

$ join <(sort f1) <(sort f2) | cut -d' ' -f1-4,7
a b c 100 200
e f g 50 20
h i j 25 15

请注意使用sort对文件进行排序,因为join需要对文件进行排序才能工作。根据给定的样本数据,它在没有sort的情况下工作,但为了保持一致性而添加。