【问题标题】:Comparision of 2 csv files having same column names with different data具有相同列名和不同数据的 2 个 csv 文件的比较
【发布时间】:2017-12-15 09:23:07
【问题描述】:

我有两个 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

【问题讨论】:

    标签: shell csv unix


    【解决方案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
    

    【讨论】:

    • 感谢您的快速帮助.. 它显示语法错误.. /usr/xpg4/bin/awk 'NR==FNR{a[$1]=$2 next}{if($1 in a= =0) p="new" 否则 p=($2-a[$1])/(a[$1]==0?1:a[$1])*100 打印 $1,p}' 1.csv 2.csv /usr/xpg4/bin/awk:语法错误上下文是:>>> NR==FNR{a[$1]=$2 next
    • 我在所有正确的地方添加了一个带有分号的单行版本。试试那个。
    • 谢谢 Jame.. 它对我来说工作正常.. 对不起,我在问另一个请求......如果我想在新的 excel 中保留新旧 % 我们应该怎么做......最近更新了问题.. 以更好的格式.. 商业利润% 旧利润 % 新变化 A 0 0 0 B 10 15 50% C 10 5 -50% D 0 清除 AG 5 新 E 0 0 0 F 1615 1615 0% G 0 0 0% JK 10 新
    • 这有点困难,因为您需要跟踪所有新老公司。您应该为此提出一个新问题并在其中引用此问题。我正在忙着提款机,你会得到更快的答复。
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多