查找两个文件unix之间的插入,删除和更改次数

时间:2014-06-01 10:06:35

标签: perl unix diff

假设我有两个文本文件 第一个 -

apple
orange
pineapple
banana
watermelon

第二个 -

apple
grape
orange juice
pineapple
watermelon

所以我们看到已添加葡萄,香蕉已被去除,橙色已变为橙汁。我想得到的主要结果是发生了一次变化,因为橙色已经变为橙汁。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

只需使用diff命令。

$ diff f1 f2
2c2,3
< orange
---
> grape
> orange juice
4d4
< banana

答案 1 :(得分:2)

perl -lne'
  BEGIN{ 
    $x = pop; 
    ($r)= map { chomp; tr/\n/|/; qr/$_/ }  do{ local $/; <> }; 
    @ARGV = $x;
  }
  print "$1 has been changed to $_" if /($r)/ and $1 ne $_;
' file1 file2

输出

orange has been changed to orange juice

<强>解释

它在BEGIN块中一次读取file1,删除尾随换行符,其余的替换为|,制作正则表达式。 $r= qr/apple|orange|pineapple|banana|watermelon/

然后逐行读取file2并检查它是否与$r正则表达式匹配。如果是,但捕获的$1与整行不同,则输出有关它的通知。