![根据第二列的匹配添加列](https://linux22.com/image/70813/%E6%A0%B9%E6%8D%AE%E7%AC%AC%E4%BA%8C%E5%88%97%E7%9A%84%E5%8C%B9%E9%85%8D%E6%B7%BB%E5%8A%A0%E5%88%97.png)
我有两个文件。第一个文件具有以下格式:
10D0325 2465 0 0 -9 -9
10D0598 2567 0 0 -9 -9
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9
10D0446 2489 0 0 -9 -9
第二个文件的格式如下:
10D0325 1
10D0598 1
10D0175 2
10D0954 1
10D0446 2
我想要做的是根据 ID 变量将第二个文件的第二列添加到第一个文件中。正如您所看到的,第一列可以用作标识符变量来将第一个数据集与第二个数据集进行匹配。但是,第一个文件包含第二个文件中不存在的一些行/ID。因此,我不能简单地订购两个文件并将此列粘贴到第一个文件中。
必须有一个相当简单的方法来做到这一点,不幸的是我的 Linux 技能有限。
PS 为了清楚起见,这就是我希望生成的文件的样子(可以使用任何其他符号来指示缺失而不是空格):
10D0325 2465 0 0 -9 -9 1
10D0598 2567 0 0 -9 -9 1
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9 2
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9 1
10D0446 2489 0 0 -9 -9 2
答案1
使用join
:
join -j 1 -a 1 <(sort file1) <(sort file2)
-j 1
: 连接字段是第一个-a 1
:打印文件 1 中不可配对的行sort
:文件必须排序才能加入
答案2
这很容易awk
:
awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' file2 file1
首先(当读取 file2 时)我们创建一个数组a
,用于存储 file2 中的第二列,并以第一列为索引。然后我们打印 file1 添加数组中的值。