2014-12-19 46 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。 它看起來很棒。

最佳, 託比