2014-12-19 47 views
0

我知道这里有几个主题已经被回答,但是我在这个主题中找到的所有代码都不适用于我的问题。这里是描述。用bash找出两个文件之间的区别

我有两个文件的问题。第一个文件由308370行组成,另一个是308369行。这两个文件需要具有相同的长度和相同的顺序。我已经命令他们。可以比较两个文件的列是第2列。为了更容易处理,我将这两个文件的第二列提取到单独的临时文件中。

我尝试了几件事。我比较了两个临时文件并搜索了空行,但结果始终没有任何结果。我发现没有区别,但显然必须有所不同。这很烦人。希望你能帮助我。

这就像是临时-文件看起来像:

rs12345 
rs34567 
rs45679567 
rs345635 

这是bash的代码我已经尝试过:

comm file1 file2 
grep -v -F -x -f file1 file2 
awk 'FNR==NR{a[$0]++;next}!a[$0]' file1 file2 
diff file_1 file_2 | grep '^>' | cut -c 3- 

最后,我要删除这一条线是在文件1中但不在文件2中。 感谢您提前帮助我。

最佳, 托比

回答

1

如果你可以使用GUI工具,那么我建议meld你。易于使用,它显示了额外的空间等微小的差异。否则,您可以使用diff。检查手册页diff了解更多信息。

1

如果我理解正确的话,

#!/bin/sh 

awk -v file=0 -v offset=0 ' 
    file == 0 { 
    data[FNR] = $0      # read first file into memory, both 
    key[FNR] = $2      # lines and isolated keys 
    } 
    file == 1 { 
    while(key[FNR + offset] != $2) {  # When parsing the second file, 
     offset = offset + 1    # skip lines in the first that do not 
             # match keys in the second 
     if(FNR + offset > length(key)) { 
     exit 
     } 
    } 
    print data[FNR + offset]    # when key is found, print corresponding 
    }          # line from the first file 
    ENDFILE { 
    file = file + 1      # set flag when first file is over. 
    }' longer.txt shorter.txt 

应该做的伎俩。考虑到两个文件

foo 1 bar 
foo 2 bar 
foo 3 bar 
foo 4 bar 

qux 1 xyzzy 
qux 2 xyzzy 
qux 4 xyzzy 

再次打印

foo 1 bar 
foo 2 bar 
foo 4 bar 
0

首先感谢的帮助。 我的帖子后几分钟我解决了我的问题。 我真的很抱歉偷你的时间。

当我排序的文件,我看到一行是一个空行。所以我剪掉了这条线,就是这样。但我对此有点好奇,因为我证明了文件是否有空行。为此,我使用了:

grep -v '^$' input > output 

看来这不起作用。 我真的很抱歉,但我绝对会试试你的代码@Wintermute。 它看起来很棒。

最佳, 托比