找出重复行之间的平均时间/距离

时间:2014-02-09 13:29:30

标签: linux shell

我有一个包含数万行包含重复项的文件。我想根据行号找到重复项之间的平均时间/距离。

例如:(第一列是行号)

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

1 个答案:

答案 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;
    }
    # ...