两个列表,比较并显示差异加或减

时间:2013-05-10 11:55:58

标签: perl sed awk

不是100%确定如何做到这一点。我想我会列出每个列表并从两者中制作一个数组。我可以得到差异,但我如何列出差异?

列表第1天

xxxx-r01 48
xxxx-r02 38
xxxx-r03 28

列表第2天

xxxx-r01 44
xxxx-r02 39
xxxx-r03 29

期望的结果。

xxxx-r01 -4
xxxx-r02 1
xxxx-r03 1

3 个答案:

答案 0 :(得分:4)

固定列数(第二个字段中的差异):

$ awk 'FNR==NR{a[NR]=$2;next}{print $1,$2-a[FNR]}' list1 list2
xxxx-r01 -4
xxxx-r02 1
xxxx-r03 1

可变列数(最后一个字段的差异):

$ awk 'FNR==NR{a[NR]=$NF;next}{$NF=$NF-a[FNR]}1' list1 list2
xxxx-r01 -4
xxxx-r02 1
xxxx-r03 1

答案 1 :(得分:0)

在Perl中,你可以这样做,

use strict;
use Data::Dumper;

my @arr1 = ( "xxxx-r01 48", "xxxx-r02 38", "xxxx-r03 28");
my @arr2 = ( "xxxx-r01 44", "xxxx-r02 39", "xxxx-r03 29");

my %seen1 = map { split/ /, $_ } @arr1;
my %seen2 = map { split/ /, $_ } @arr2;


foreach my $test (keys %seen2) {
 my $diff = $seen2{$test} - $seen1{$test};
 print"$test:$diff\n";
}

输出:

xxxx-r01:-4
xxxx-r02:1
xxxx-r03:1

答案 2 :(得分:0)

 join list1 list2 | awk '{print $1,$3-$2}'