比较两个文件

时间:2011-05-20 06:30:37

标签: perl comparison diff

我有两个文件

file1内容如下

=============================================== ====

OUTPUT1:---------
    orange
    india
    US

xx

OUTPUT2:---------

    orange-1
    india-1
    US-1
xx

=============================================== ====

file2内容如下

OUTPUT1:---------
    orange
    india
    US

xx

OUTPUT2:---------
    orange-1
    india-1
    US-2
xx

=============================================== ====

我想要两个差异如下

-----------------------
OUTPUT1: No evolution
----------------------
OUTPUT2: Evolution found
Before:US-1
After:US-2
----------------------

是否可以使用上述要求在perl中编写脚本

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:5)

没有perl,但更棒的是:diff

它比较文件:

[blender@arch Desktop]$ diff file1.txt file2.txt 
11c11
<     US-1
---
>     US-2

11c11表示已更改的文字从第11行开始,即第11个字符。

答案 1 :(得分:1)

Algorithm::Diff应该做的工作。它适用于数组(即你可以解析你喜欢的任何输入格式)并生成类似diff的输出。

然而,可能会发现LCS算法对于任务来说有点过分,你应该选择hash tables

答案 2 :(得分:0)

可能在Perl中,当然,它是一种非常强大的语言。

我们可以对数据做出的假设会影响难度。它排序了吗?文件有多大。

如果数据未排序且文件太大而无法完全保存在内存中,那么您可能需要采用管道方法,首先排序然后“差异化”,在这种情况下,如果您可以访问Unix遗产工具例如差异和排序你可能甚至不需要Perl。

假设您想使用Perl,我建议分阶段查看问题:

  1. 识别跨越多行的“记录”。编写代码以使用单个文件并构建每个记录的表示。
  2. 解决排序问题,如果需要构建包含已排序记录的中间文件。
  3. 在两个已排序的文件中进行差异,如果你可以在内存中构建一个完整文件的哈希这很容易,否则你需要从一个文件或另一个文件中获取记录,具体取决于哪个文件具有“下一个”记录
  4. 确定更改后,打印出所需格式的详细信息