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

cwtwac6a  于 2023-05-17  发布在  Unix
关注(0)|答案(1)|浏览(184)

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

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

Business    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
qncylg1j

qncylg1j1#

我会使用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

相关问题