在不相关的数据条目之间添加空行

时间:2013-01-15 19:17:05

标签: python perl unix

我有一个数据文件,我需要使用程序的输入,但我需要稍微调整格式。使用此方法:Extracting specific data from a file and writing it to another file我生成了一个如下所示的文件:

PITG_00002  2   397
PITG_00004  1   1275
PITG_00004  1397    1969
PITG_00005  200 1111
PITG_00005  1281    1646
PITG_00006  1   816
PITG_00009  2398    3276
PITG_00009  1536    1952
PITG_00010  1   537

我需要区分来自同一序列(第一列)的数据和来自不同序列的数据,方法是在序列之间添加一个独特的空白行,以便它看起来像:

PITG_00002  2   397

PITG_00004  1   1275
PITG_00004  1397    1969

PITG_00005  200 1111
PITG_00005  1281    1646

PITG_00006  1   816

PITG_00009  2398    3276
PITG_00009  1536    1952

PITG_00010  1   537

我用可用的程序/编码选项标记了这一点。非常感谢您给予的任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

$ perl -api -e 'print "\n" unless $seen{$F[0]}++ && $. > 1;' file.txt

答案 1 :(得分:1)

如果你想坚持使用Python。使用itertools.groupby

可以获得类似的结果
>>> with open("test.txt") as fin, open("test.out","w") as fout:
    groups = groupby(((e.split()[0],e) for e in fin),
             key = operator.itemgetter(0))
    for key, group in groups:
        fout.write('\n'.join(e[1] for e in group))