在python中可以很容易地做到这一点。首先,您需要以正确的格式读取数据:def line_to_tuple(line):
data = line.split()
return (data[0],int(data[1]),int(data[2]))
这将把每一行变成一个元组,它将按字典顺序排序。因为您的字符串(第一列)是以一种容易排序的方式设置的,所以我们不需要担心它们。第二列和第三列只需转换为整数,使它们正确排序。在
^{pr2}$
下面是另一个在字段之间保留空白行的实现:import itertools
def field1(line):
data = line.split()
try:
return data[0]
except IndexError:
return None
def fields(line):
data = line.split()
return data[0],int(data[1]),int(data[2])
with open('test.dat') as fin, open('output.dat','w') as fout:
for k,v in itertools.groupby(fin,key=field1):
if k is None:
fout.write('\n')
else:
fout.writelines(sorted(v,key=fields))
它使用itertools基于空行对文件进行分块,并在写回之前对这些组进行单独排序。在
输出如下:temp $ cat output.dat
PITG_00129 606 1436
PITG_00130 1 987
PITG_00132 2 1321
PITG_00133 1 2946
PITG_00133 4081 4515
PITG_00133 4464 11708