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

paste two files according to concordance between columns

我需要一些帮助:

我有文件 1:

ID
100
102
103
104
108
109
112
.
.
.

和文件 2:

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
.
.
.

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

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 中的数据从文件 2 粘贴到文件 1,同时考虑到文件 1 和文件 2 中字段 1 的一致性。

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

有什么帮助吗?也欢迎带有剪切和粘贴功能的 Unix 命令

你确实可以使用 awk:

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

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

如果数组包含 ID(又名 </code>),<p><code>NR>FNR && a[] 正在打印 file2 的行。

如果你喜欢使用 join,你可以简单地做:

join file file2

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

join -t $'\t' file1 file2

更惯用的 awk 解决方案是:

awk 'NR==FNR{id[];next} 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 ].