在特定位置用制表符替换换行符

在特定位置用制表符替换换行符

我有一个这样的文件。

M00425_ght_cgd2_2212_B_0_2 (newline)
ATGCCGTTAGAGCTAG
M00425_ght_cgd2_2213_B_0_3_1 (newline)
GTACATTGACATAGAGTACATAGCGA

我想要一个这样的文件:

M00425_ght_cgd2_2212_B_0_2(tab)ATGCCGTTAGAGCTAG
M00425_ght_cgd2_2213_B_0_3_1(tab)GTACATTGACATAGAGTACATAGCGA

有人可以帮忙吗?

答案1

简单sed命令:

sed '$!N;s/\n/\t/' inputfile.txt > outputfile.txt

这意味着用制表符分隔符连接每对行。

此命令使用命令连接两个连续的行N。它们之间用一个字符连接\n。替换命令用制表符替换此换行符,从而用制表符分隔符连接每对行。

这也看起来像这个sed '/$/N;s/\n/\t/' inputfile.txt命令。

如果您的文件包含空行,您可以先使用以下sed命令删除所有行:

sed -i '/^$/d' inputfile.txt

答案2

这与 Jacob 的回答类似,但又有很大不同,所以我认为值得一提。您可以检查行中是否包含除“GACT”之外的字符,而不是搜索字符串是否存在。

#!/usr/bin/env python

with open('input.txt','r') as f:
    lines = f.readlines()
for i in range(0,len(lines)):
    if len(lines[i].strip('GACT\n'))>0:
        lines[i] = lines[i].replace('\n','\t')
with open('output.txt','w') as f:
    f.writelines(lines)

如果您的文件不满足替换行中唯一标识符的要求,您也可以做出不同的假设。以下假设对于每个奇数行,您希望用制表符替换换行符,而对于每个偶数行,您则不这样做。

#!/usr/bin/env python

with open('input.txt','r') as f:
    lines = f.readlines()
for i in range(0,len(lines)):
    if i/2==i/2.0:
        lines[i] = lines[i].replace('\n','\t')
with open('output.txt','w') as f:
    f.writelines(lines)

例如,您可以将其另存为,lines2tabs.py然后使用 导航到终端中的目录cd并使用 运行它python lines2tabs.py。请注意,您必须更改input.txt为文件的名称。

相关内容