比较2个csv文件具有相同的列名和不同的数据

时间:2017-12-15 09:23:08

标签: shell csv unix

我有两个CSV文件,每个文件有2列,列名相同。 1.csv先生成,然后在1小时后生成2.csv。小号 o我希望看到每个业务部门的利润百分比增加和减少与上次报告相比。例如:业务单位B的增量为50%(((15-10)/ 10)* 100)。 然而对于C,它减少了50%。新的小时报告中还添加了一些新的业务单位(AG& JK),只能用于新的小时报告。然而,很少有企业单位(D)也从下一个小时移除,这可以被认为是不需要的。 所以基本上我需要如何比较和提取这些数据。

  Busines Profit %
    A   0
    B   10
    C   10
    D   0
    E   0
    F   1615
    G   0

Busines profit %
    A   0
    B   15
    C   5
    AG  5
    E   0
    F   1615
    G   0
    JK  10

更新要求:

Business    Profits% Old    profit % new    Variation
A   0   0   0
B   10  15  50%
C   10  5   -50%
D   0       cleared
AG      5   New
E   0   0   0
F   1615    1615    0%
G   0   0   0%
JK      10  New

1 个答案:

答案 0 :(得分:1)

我使用awk来完成这项工作,如下所示:

$ awk 'NR==FNR{                              # process file2
    a[$1]=$2                                 # hash second column, key is the first column
    next                                     # process the next record of file2
}
{                                            # process file1
    if($1 in a==0)                           # if company not found in hash a
        p="new"                              # it must be new
    else 
        p=($2-a[$1])/(a[$1]==0?1:a[$1])*100  # otherwise calculate p%
    print $1,p                               # output company and p%
}' file1 file2
A 0
B 50
C -50
AG new
E 0
F 0
G 0
JK new

带有适当分号的单行版本:

$ awk 'NR==FNR{a[$1]=$2;next}{if($1 in a==0)p="new";else p=($2-a[$1])/(a[$1]==0?1:a[$1])*100;print $1,p}' file1 file2