比较两个文本文件中行和列的值的意外结果

时间:2014-06-19 21:00:44

标签: awk scripting comparison

这与我之前的一个问题相关:How to compare values of rows and columns of two text files in bash?

file1.txt(包含特殊字符:cat -vet file1.txt)

Name  Col1  Col2  Col3^M$  
-----------------------^M$ 
row1  1     4     7^M$         
row2  2     5     8^M$          
row3  3     6     9$

file2.txt(包含特殊字符:cat -vet file2.txt)

Name  Col1  Col2  Col3^M$   
-----------------------^M$         
row1  1     4     7^M$ 
row2  2     5     999$

我有点想出比较两个文件的方法。但由于某种原因,它并没有给我我想要的结果。这是我用来比较文件的代码。

awk '
FNR < 2 { next }
FNR == NR {
    for (i = 2; i <= NF; i++) 
    {
        a[i,$1] = $i; 
    }    
    b[$1];
    next;

}
($1 in b) {
   for (i = 2; i <= NF; i++) 
   {
      if (a[i,$1] == $i) 
          printf("%s->Col%d: %d vs %d: Equal\n", $1, i-1, a[i,$1], $i);
      else 
          printf("%s->Col%d: %d vs %d: Not Equal\n", $1, i-1, a[i,$1], $i);
   }
} ' file1.txt file2.txt

预期结果:

row2->Col1: 1 vs 1: Equal
row2->Col2: 4 vs 4: Equal
row2->Col3: 7 vs 7: Equal
row1->Col1: 2 vs 2: Equal
row1->Col2: 5 vs 5: Equal
row1->Col3: 8 vs 999: Not Equal

实际结果:

row2->Col1: 1 vs 1: Equal
row2->Col2: 4 vs 4: Equal
row2->Col3: 0 vs 7: Not Equal
row1->Col1: 2 vs 2: Equal
row1->Col2: 5 vs 5: Equal
row1->Col3: 0 vs 999: Not Equal

有谁知道为什么实际结果的第3行和第6行与0比较(不应该这样做)?

1 个答案:

答案 0 :(得分:0)

特别感谢@jaypal帮助我解决问题。问题是这些文本文件是在MS-DOS中创建的,必须转换为Unix格式才能在Linux或Unix环境中执行。因此,在执行上述问题的代码段之前,我必须使用此命令:dos2unix file1.txt