python中带变量的awk命令

2024-04-26 09:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我将以下命令传递到python脚本中。你知道吗

awk '/^>/{n=split($0,a,"_")} /string/{sum+=a[n]} END{print sum}' filein.fasta

不管我做什么,都会搞得一团糟(操作系统,波本,子流程调用...) 我最后一次尝试是:

string = this variable is a string like "acgactactgtcagtgctgac" provided in a loop     
filein = open("filein.fasta")
with open('fileout.txt', 'a+') as outputd:
        subprocess.call(['awk', '\'/^>/{n=split($0,a,"_")}', '/' + line + '/{sum+=a[n]}', 'END{print sum}\'', filein], stdout=outputd, shell=True)    

通过这种方式,我在这一点上没有错误,但它不能正常工作,因为它会在脚本中出现错误。 如何在python中正确地传递这个命令?在这种情况下,引号是个棘手的问题


Tags: 命令脚本string错误流程openthisfasta
1条回答
网友
1楼 · 发布于 2024-04-26 09:28:57

请避免在python脚本中使用awk命令。你知道吗

我真的很喜欢awk,但是python可以轻松地做awk可以做的事情。你知道吗

awk '/^>/{n=split($0,a,"_")} /string/{sum+=a[n]} END{print sum}' filein.fasta

是吗

For each line that contains > at begining, it splits using delimiter _. It keeps parsing and when /string/ is found, it adds the last field of the splitted line to variable sum.

使用python:

sum = 0
with open("filein.fasta") as input:
    for line in input:
        if line[0] == '>':
            fields = line.split('_')
        if (string in line) and fields:
            sum += int(fields[-1]) # or float
print(sum)

调用子进程会降低代码的可移植性,并且更难调试或监视。你知道吗

顺便说一句,awk脚本不好,应该是:

awk '/^>/{n=split($0,a,"_")} /string/&&n{sum+=a[n]} END{print sum}' filein.fasta

相关问题 更多 >