如何合并同一文件中的不同列?

如何合并同一文件中的不同列?

我有三个文件,如下图:

FILE 1: 
DATE      PGTO_CRED
20180801    50.00
20180802    150.00
20180803    130.00
20180804    110.00
20180805    200.00

FILE 2: 
DATE       PGTO_TOTAL
20180801    150.00
20180802    300.00
20180803    200.00
20180804    250.00
20180805    400.00

FILE 3: 
DATE       PGTO_FEE
20180801    35.00
20180802    10.00
20180803    25.00
20180804    140.00
20180805    135.00

我需要我的输出文件是这样的:

DATE    PGTO_CRED   PGTO_TOTAL  PGTO_FEE
20180801    50.00   150.00      35.00
20180802    150.00  300.00      10.00
20180803    130.00  200.00      25.00
20180804    110.00  250.00      140.00
20180805    200.00  400.00      135.00

如何在 Redhat Linux 上执行此操作?

答案1

许多工具都可以做到这一点,可能awk是第一个想到的,但我推荐该join命令,特别是如果输入已经排序(如您的示例中所示):

join file1 <(join file2 file3) | column -t

column -t只是为了很好地对齐输出,您可以将其删除。

输出:

DATE      PGTO_CRED  PGTO_TOTAL  PGTO_FEE
20180801  50.00      150.00      35.00
20180802  150.00     300.00      10.00
20180803  130.00     200.00      25.00
20180804  110.00     250.00      140.00
20180805  200.00     400.00      135.00

答案2

其他几个选项:

paste file{1,2,3} | awk '{print $1,$2,$4,$6}' | column -t

或者只是 awk:

awk '
    NR == FNR {line[FNR] = $0; next} 
              {line[FNR] = line[FNR] OFS $2} 
    END       {for (i=1; i<=FNR; i++) print line[i]}
' file{1,2,3} | column -t

相关内容