【发布时间】:2021-01-16 05:18:38
【问题描述】:
我需要帮助 :) 我有两个文件(都很大)。
文件 1:
1a04 1a04
9 161.9
10 143.5
11 146.8
12 111.5
13 100.2
14 75.2
15 46.1
16 90.3
17 93.3
18 119.9
19 178.9
20 171.4
21 168.4
22 169.0
23 176.4
24 167.0
25 164.5
文件2
1a04 1a04
5 0
6 -
7 E
8 E
9 E
10 E
11 E
12 E
13 -
14 S
15 >>
16 H
17 H
18 H
19 H
20 H
我想比较两个文件的第一列,如果它们匹配,则将它们合并到一个新文件中。 所以我需要的输出是:
1a04 1a04 1A04
9 161.9 E
10 143.5 E
11 146.8 E
12 111.5 E
13 100.2 -
14 75.2 S
15 46.1 >>
16 90.3 H
17 93.3 H
18 119.9 H
19 178.9 H
20 171.4 H
我尝试了多个 awk 组合,但我无法获得我想要的确切输出 感谢您的帮助
【问题讨论】:
-
考虑使用 (POSIX)
join命令而不是awk。假设文件file1和file2按排序顺序排列join -o 1.1,1.2,2.2 file1 file2。如果它们未按排序顺序,请先排序,或使用process substitution:join -o1.1,1.2,2.2 <(sort file1) <(sort file2)。 -
您好,感谢您的回复,很遗憾,我无法对它们进行排序,这就是我正在寻找和 awk 解决方案的原因
-
为什么不能对它们进行排序?鉴于示例数据,显示的
join命令会产生您想要的输出 - 给定或获取列之间的间距(这是不稳定的,因此非常难以准确重现)。 -
我不能,因为我在文件中有多个标题行(例如: 1a04 1a04 ),当我尝试加入命令时这些标题行被删除。