根据列之间的一致性粘贴两个文件

时间:2016-07-15 13:27:32

标签: shell join awk paste cut

我需要一些帮助:

我有file1:

ID
100
102
103
104
108
109
112
.
.
.

和file2:

ID    []    p1    p2
100    2.5    3.0    2.0
101    2.0    4.0    3.0
102    2.6    4.0    2.5
103    2.3    2.0    NA
104    2.3    2.0    2.0
105    3.5    2.8    2.0
106    1.7    NA    3.2
107    5.0    4.0    4.0
108    3.2    2.0    4.0
109    2.9    1.0    1.5
110    5.0    NA    NA
111    2.9    4.0    4.0
112    3.1    2.5    2.0
.
.
.

我想将这两个文件粘贴到file3中,如下所示:

ID    []    p1    p2
100    2.5    3.0    2.0
102    2.6    4.0    2.5
103    2.3    2.0    NA
104    2.3    2.0    2.0
108    3.2    2.0    4.0
109    2.9    1.0    1.5
112    3.1    2.5    2.0
.
.
.

基本上,将字段2,3,4中的数据从file2粘贴到file1,考虑file1和file2中的field1中的同意。

我尝试过一些带有NR == NFR的awk命令,但我只是输出了file1的内容,然后是file2的内容......

有任何帮助吗?也欢迎使用剪切和粘贴的Unix命令

3 个答案:

答案 0 :(得分:6)

您确实可以使用awk

awk 'NR==FNR{a[$1]=1} NR>FNR && a[$1]' file1 file2

NR==FNR{a[$1]=1} a数组填充了file1的内容。

如果数组包含ID(又名NR>FNR && a[$1]),则

$1正在打印file2行。

答案 1 :(得分:3)

如果您想使用加入,您只需执行以下操作:

join file file2

或者,如果输入是制表符分隔的,则使用bash:

join -t $'\t' file1 file2

答案 2 :(得分:3)

更惯用的awk解决方案是:

awk 'NR==FNR{id[$1];next}$1 in id' file1 file2 >file3

<强>输出

ID    []    p1    p2
100    2.5    3.0    2.0
102    2.6    4.0    2.5
103    2.3    2.0    NA
104    2.3    2.0    2.0
108    3.2    2.0    4.0
109    2.9    1.0    1.5
112    3.1    2.5    2.0

<强>参考文献:

  1. awk [ referring to an array element ]
  2. awk [ next statement ]