首页 > 解决方案 > 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   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 组合,但我无法获得我想要的确切输出 感谢您的帮助

标签: bashfileawk

解决方案


使用 2 阶段awk将是:

awk 'FNR == NR { map[$1]=$2; next} $1 in map { print $0, map[$1] }' file2 file1 |
column -t
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

推荐阅读