2014-02-09 48 views
0

我有一個包含成千上萬行重複行的文件。我想根據行號查找重複項之間的平均時間/距離。查找重複行之間的平均時間/距離

例如:(其中第一列是一個行號)

1 string1 
2 string2 
3 string2 
4 string1 
5 string3 

會給2(第一對重複的之間3行,第二重複之間1行,除以2,因爲有2份重複)。

關於如何解決這個問題的任何想法?

編輯

Starting test! 
32-bit hash: 0x995D9A6E 
32-bit hash: 0xA27B264D 
32-bit hash: 0x856ED0A5 
32-bit hash: 0x3B83614D 
32-bit hash: 0x23D92F43 
32-bit hash: 0xA1D0BE63 
32-bit hash: 0xB0BF66B6 
32-bit hash: 0x968F7074 
32-bit hash: 0x76F75FD1 
32-bit hash: 0x76A51358 
+0

如果你有3個重複的行,你考慮一下距離:1-2,1-3,2-3? –

+0

我想我會把他們當作兩個單獨的重複。考慮的距離將在第一和第二,然後是第二和第三之間。 – SamSong

+0

那麼,你首先說過你只考慮到第一次出現的距離。 –

回答

2

你可以做,使用GNU AWK:以上

$ cat a.txt 
string1 
string2 
string2 
string1 
string3 

$ cat test.awk 
{ 
    if($0 in lines) { 
     distance += NR - lines[$0]; 
     ++count; 
    } 
    else { 
     lines[$0] = NR; 
    } 
} 
END { 
    print distance/count; 
} 

$ awk -f test.awk < a.txt 
2 

爲您提供了與其他行的第一次出現之間的距離。如果你想在未來和在同一行的內容出現做之間的距離:

# ... 
    if($0 in lines) { 
     distance += NR - lines[$0]; 
     lines[$0] = NR; # <--- add this 
     ++count; 
    } 
    # ... 
+0

我不相信這是有效的。我用一個正常大小的文件測試它,但只有兩個重複行(每個重複一次)並手動計算它。 – SamSong

+0

@SamSong它適用於您提供的樣本。張貼另一個樣本。 –

+0

用輸入樣本編輯該問題。有沒有辦法發佈整個文件? – SamSong