我的问题如下。我有一个包含许多行的BIG文件,其中包含有序数字(可以重复)
1
1.5
3
3.5
6
6
...
1504054
1504056
我想打印所有行号,使得它们的差异小于给定的阈值thr。让我们说例如thr = 2.01,我想要
0 1
0 2
1 2
1 3
2 3
4 5
...
N-1 N
我在python中写了一个东西,但文件很大,我想我需要一个聪明的方法来在bash中执行此操作。 实际上,在完整的数据结构中,还存在包含字符串的第二列:
1 s0
1.5 s1
3 s2
3.5 s3
6 s4
6 s5
...
1504054 sN-1
1504056 sN
并且,如果容易做的话,我想在每一行写一对链接的字符串,可能用“|”分隔:
s0|s1
s0|s2
s1|s2
s1|s3
s2|s3
s4|s5
...
sN-1|sN
感谢您的帮助,我对bash不太熟悉
答案 0 :(得分:1)
在任何语言中,您都可以实现此伪代码的程序:
while read line:
row = line.split(sep)
new_kept_rows = []
for kr in kept_rows :
if abs(kr[0], row[0])<=thr:
print "".join(kr[1:]) "|" "".join(row[1:])
new_kept_rows.append(kr)
kept_rows = new_kept_rows
这个程序只保留几条可以匹配条件的行。所有其他人都没有记忆。因此,即使是大文件,内存占用也应该很小。
我会使用awk语言因为我很舒服。但是python也适合(我给的伪代码非常接近python)。