Bash AWK比较来自不同文件的两列并合并输出
我需要帮助:) 我有两个文件(都很大) 文件1:Bash AWK比较来自不同文件的两列并合并输出,bash,file,awk,Bash,File,Awk,我需要帮助:) 我有两个文件(都很大) 文件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
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组合,但无法获得所需的确切输出
感谢您的帮助使用2阶段
awk
这将是:
awk 'FNR == NR { map[$1]=$2; next} $1 in map { print $0, map[$1] }' file2 file1 |
column -t
考虑(POSIX)命令而不是<代码> AWK<代码>。假设文件
file1
和file2
按排序,join-o 1.1,1.2,2.2 file1 file2
。如果它们没有按顺序排序,请先对它们进行排序,或者使用:join-o1.1,1.2,2.2您好,谢谢您的回复,我无法对它们进行排序,不幸的是,这就是我寻找的原因和awk解决方案。您为什么不能对它们进行排序?给定示例数据,显示的join
命令生成您想要的输出-给出或获取列之间的间距(这是不稳定的,因此非常难以精确复制)。重复问题我不能,因为我在文件中有多个标题行(例如:1a04 1a04),当我尝试join命令时会被删除。谢谢,我试过你的建议,但对我来说似乎不起作用1a04 1a04 1a04 1a04 9 161.9 S 10 143.5 G 11 146.8 G 12 111.5 G 13 100.2 S 14 75.2>15 46.1 H 16 90.3 H 17 93.3 H 18 119.9 H 19 178.9 H 20 171.4 H 21 168.4 T 22 169.0 T 23 176.4 T 24 167.0 T 25 164.5 S
示例文件的输出附在答案中,是否与预期输出不匹配?检查输入文件,确保两个文件都有两列,并且其中任何一列都没有DOS行结尾。是的,当我尝试将其扩展到整个文件时,输出是完全不同的(我只附上了部分示例文件)。然后提供一个有问题的实际数据的小示例。如果不看到实际数据,我就猜不出一个解决方案。@Fede:Hmmm-34 MiB左右的两个文件中的数据。没有任何错误的解释。这使得帮助你变得有点棘手。您应该创建一个MCVE(-或MRE或现在使用的任何名称)或SSCCE()。您可能仍然需要一个外部站点来承载数据,但不应该用34个MiB来显示问题。
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