Tôi có một tệp chứa hàng chục nghìn hàng trùng lặp. Tôi muốn tìm thời gian/khoảng cách trung bình giữa các lần trùng lặp dựa trên số hàng.
Ví dụ: (cột đầu tiên là số hàng)
1 chuỗi1
2 chuỗi2
3 chuỗi2
4 chuỗi1
5 chuỗi3
sẽ cho 2 (3 hàng giữa cặp trùng lặp đầu tiên và 1 hàng giữa cặp thứ hai, chia cho 2 vì có 2 bản sao).
关于如何解决这个问题有什么想法吗?
biên tập
Bắt đầu thử nghiệm!
Băm 32 bit: 0x995D9A6E
Băm 32 bit: 0xA27B264D
Băm 32 bit: 0x856ED0A5
Băm 32 bit: 0x3B83614D
Băm 32 bit: 0x23D92F43
Hàm băm 32 bit: 0xA1D0BE63
Băm 32 bit: 0xB0BF66B6
Băm 32 bit: 0x968F7074
Băm 32 bit: 0x76F75FD1
Băm 32 bit: 0x76A51358
Bạn có thể thực hiện việc này bằng GNU awk:
$ mèo a.txt
chuỗi1
chuỗi2
chuỗi2
chuỗi1
chuỗi3
$ cat test.awk
{
if($0 ở dòng) {
khoảng cách += NR - đường [$0];
++ đếm;
}
khác {
dòng[$0] = NR;
}
}
KẾT THÚC {
in khoảng cách/số lượng;
}
$ awk -f test.awk < a.txt
2
Khoảng cách giữa lần xuất hiện đầu tiên của dòng và các dòng khác được đưa ra ở trên. Nếu bạn muốn khoảng cách giữa phần tiếp theo và phần trước trên cùng một dòng, hãy làm điều này:
# ...
if($0 ở dòng) {
khoảng cách += NR - đường [$0];
dòng[$0] = NR; # <--- thêm cái này
++ đếm;
}
# ...
Tôi là một lập trình viên xuất sắc, rất giỏi!