合并两个文件以获得unix中的%差异

时间:2014-03-05 17:17:31

标签: bash unix awk

我有两个像这样排列的文件

File1.txt
Parameter1  20
Parameter2  30

File2.txt
Parameter1 30
Parameter2 60

我希望输出文件包含File1中的Parameters,File2中的Parameters以及File1.txt和File2.txt之间的%差异的值 如下所示。我正在尝试创建一个awk / bash脚本,但到目前为止还没能完成它。

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

3 个答案:

答案 0 :(得分:3)

这可能应该这样做:

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可以替代:

答案 1 :(得分:2)

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

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

为了您的输入,它会产生:

Parameter1 20 30 50%
Parameter2 30 60 100%

答案 2 :(得分:0)

使用awk的解决方案是:

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