我想从我的300多个文件中删除每行以@开头的最后一个字符,每个文件大约1gb。在
我的示例文件如下:
@1_1101_1473_2134_1
CATGCGGGAGGAGGAGGACGAGGACCTGCTGCAGTTTGCCATCCAGCAGAGTCTCCTGGAGGTGGGGGCCGAGTACGACCAGGTAACACCCC
+
FFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFBBFFFFF<FFFFFF/BFBF7FFBFFFFFFFFFFBFFFFFF
@1_1101_1635_2243_1
CATGCACACCTCCCGGTCTCCGTTGTGGAGGATCAGGTCCACGATCTCCTGGGTCCACGTGGTGCCTACACACACACACACACACACACACA
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
我想从以@开头的行中删除最后一个字符1,所以我的输出应该是
^{pr2}$我第一次尝试python,它适用于这些行,但是作为一个新手,我不知道如何在输出中保留所有的行。在
with open("file.fq") as f:
for line in f:
length=(len(line)-2)
if line.startswith('@'):
line=line[:length]+''+line[length+1:]
print(line)
当然,这只给出了“线”,但我想证明它是有效的
@1_1101_1473_2134_
@1_1101_1635_2243_
然后我试了awk和sed。我可以选择以@using awk开头的行,如下所示:
awk '{if (/^@/)}'
我可以用sed删除每行的最后一个字符:
sed {'s/.$//'}
所以我试着把这两者结合起来,简单地说:
awk '{if (/^@/)}' | sed {'s/.$//'} file.fq
这不起作用。在
顺便说一句,如果可能的话,我更希望直接从我的文件中删除这些字符,而不是创建一个新的文件,删除这些字符,因为我有超过300gb的数据,当然,我更喜欢一种快速的方法。在
任何帮助升级我的命令,或任何其他方式做这件事的任何其他方式都是高度赞赏的。另外,我希望在循环中对所有文件运行正确的命令,这就是为什么我第一次尝试生成一个python脚本,所以任何关于loop stage的帮助对于您的解决方案也是非常有用的。在
非常感谢
这应该是有效的:
/^@/
匹配以@
开头的行s/.$//
删除这些行的最后一个字符-i
就地编辑,-i
选项的用法因sed
版本而异,语法请参阅文档
^{pr2}$使用
python
./del_last.py *.fq
对于Python脚本,只需从条件套件中取出print语句:
如果你有足够的内存来保存一个完整的文件和一个副本,你可以使用一个正则表达式立即对整个文件进行更改。在
^{pr2}$相关问题 更多 >
编程相关推荐