我有这两个文件包含一个项目列表,每个项目的数量用空格分隔。这些列表应该已经订购,并且每个列表总是具有相同数量的项目,但是我更希望制作依赖于项目名称而不依赖于行号的代码。
我需要输出只存在更改的输出,例如每个已更改其关联值的项目的diff
。我知道我可以使用meld
或awk
,但我需要一个非常具体的输出,因为我必须为每一个变化发送邮件,所以我想我应该使用的东西比如cat before.txt
Apples 3
Oranges 5
Bananas 7
Avocados 2
cat after.txt
Apples 3
Oranges 7
Bananas 7
Avocados 3
output wanted:
Oranges has changed form 5 to 7
Avocados has changed form 2 to 3
。
6
答案 0 :(得分:2)
awk
是你的朋友
awk 'NR==FNR{price[$1]=$2;next}
$1 in price{
if(price[$1]!=$2){
printf "%s has changed from %s to %s%s",$1,price[$1],$2,ORS
}
}' before.txt after.txt
<强>输出强>
Oranges has changed from 5 to 7
Avocados has changed from 2 to 3
如果您是awk
新手,请考虑购买Arnold Robbins的[ Effective awk Programming ]。
答案 1 :(得分:0)
没有其他答案那么好,但很容易理解。这不是一个非常经济的方式来完成这项任务,但是我已经添加了它,因为它使事情变得简单。当然,如果表现不是真正的问题。
paste before.txt after.txt | awk '$2!=$4 {print $1 " are changes from " $2 " to " $4}'
Oranges are changes from 5 to 7
Avocados are changes from 2 to 3