我有一个看起来像这样的文件:
#name cdsStart cdsEnd exonCount exonStarts exonEnds
NM_017436 431 586 3 420,440,513, 435,500,596,
NM_001173466 720 950 4 700,752,821,823, 721,760,900,973,
我想要分别将第2列和第3列中的数字换成第5列中的第一个数字和第6列中的最后一个数字。这是我想要的输出:
NM_017436 431 586 3 *431*,440,513, 435,500,*586*,
NM_001173466 720 950 4 *720*,752,821,823, 721,760,900,*950*,
为了清晰起见,我将输出文件中的更改用星号标记。我想到的是用这个脚本分割文件:
with open('nonsensepositions.txt') as inf:
with open('nonsensepositions_split.txt', 'w') as outf:
for line in inf:
outf.write('\t'.join(line.split(',')))
然后尝试交换特定列,但我认为由于拆分后列的数量不同,这可能会很有挑战性。然后,我必须找出一种方法,使其在执行交换后显示为原始文件。有没有更简单的方法来执行这种类型的交换,还是我需要根据,
分割文件并按照我的建议进行分割?
答案 0 :(得分:2)
$ awk '{ sub(/^[0-9]+/,$2,$5); sub(/[0-9]+,$/,$3",",$6) } 1' file
#name cdsStart cdsEnd exonCount exonStarts exonEnds
NM_017436 431 586 3 431,440,513, 435,500,586,
NM_001173466 720 950 4 720,752,821,823, 721,760,900,950,