一开始,我使用的输入文件是300MB以上的contig的.fa文件,会给报错:/var/spool/slurmd/job05086/slurm_script: line 6: 12195 Segmentation fault (core dumped)
在中文社区没有搜索到解决方法...遂上github找问题qSegmentation fault (core dumped) · Issue #37 · smaegol/PlasFlow (github.com)https://github.com/smaegol/PlasFlow/issues/37参考这则issue,作者给的建议是缩小输入文件,那就缩小吧。
直接求助chatgpt,把一个.fa文件拆成几个(这里是拆了5个)。
import os
# 输入.fasta文件名
input_file = "try.fa"
# 计算.fasta文件中的序列总数
num_seqs = int(os.popen("grep -c '^>' "+input_file).read().strip())
# 计算每个文件应包含的序列数
num_per_file = int(num_seqs / 5)
# 将.fasta文件分成三个文件
with open(input_file, "r") as f:
seq_count = 0
file_num = 1
out_file = open("output_{}.fasta".format(file_num), "w")
for line in f:
if line.startswith(">"):
seq_count += 1
if seq_count > num_per_file and file_num < 5:
# 关闭当前文件并打开下一个文件
out_file.close()
file_num += 1
out_file = open("output_{}.fasta".format(file_num), "w")
seq_count = 1
out_file.write(line)
out_file.close()
检查一下AI写好的代码,没有问题,把这个代码保存为try.py,输入命令python try.py运行之。
然后再跑plasflow,可以了。。。
根据我的测试,80多MB的文件还是跑不动plasflow,60几MB的文件可以。
类似解决方案在kofam_scan中的应用
另外,在使用kofam_scan的时候,使用下图代码时,若文件太大,则可能跑不出来,比如我一个8GB左右的文件,跑了十几天,最后输出报错Error: Unknown KO: 1
./exec_annotation -f mapper --cpu 25 -o kegg.txt protein_rename.fa -E 1e-3
一怒之下用上述代码把该文件分成100个小文件,分别跑kofam_scan,可以跑出来了。