【问题标题】:combining two files to get % difference in unix组合两个文件以获得Unix中的百分比差异
【发布时间】:2014-03-05 17:17:30
【问题描述】:

我有两个这样排列的文件

File1.txt
Parameter1  20
Parameter2  30

File2.txt
Parameter1 30
Parameter2 60

我希望输出文件包含 File1 中的参数值、File2 中的参数值以及 File1.txt 和 File2.txt 之间的 % 差异 如下所示。我正在尝试制作一个 awk/bash 脚本,但到目前为止未能正确完成。

Output.txt
Parameter1  20 30 50%
Parameter2  30 60 100%

【问题讨论】:

  • 考虑编辑您的问题,向我们展示您的尝试和当前的输出。祝你好运。

标签: bash unix awk


【解决方案1】:

这应该可以做到:

awk 'NR==FNR{A[$1]=$2; next}{print $0, A[$1], (A[$1]/$2-1)*100 "%"}' file2 file1

或者,如果两个文件的第一个字段的顺序相同:

awk '{v=$2} getline<f{print $0, v, (v/$2-1)*100 "%"}' f=file1 file2

为了使join 工作,文件需要按排序顺序

paste 如果两个文件的第一个字段的顺序相同,则可以替代:

【讨论】:

    【解决方案2】:

    如果文件已排序,您可以使用joinawk

    join file1 file2 | awk 'v=($3-$2)*100/$2 {print $0, v"%"}'
    

    对于您的输入,它会产生:

    Parameter1 20 30 50%
    Parameter2 30 60 100%
    

    【讨论】:

      【解决方案3】:

      使用awk 的解决方案是:

      join file1 file2 | awk '{ print $1" "$2" "$3" "($2 + $3)"%"}'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 2020-11-16
        • 1970-01-01
        • 2018-04-18
        • 2014-09-18
        • 1970-01-01
        相关资源
        最近更新 更多