Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中带变量的awk命令_Python_Variables_Awk_Subprocess - Fatal编程技术网

python中带变量的awk命令

python中带变量的awk命令,python,variables,awk,subprocess,Python,Variables,Awk,Subprocess,我将以下命令传递到python脚本中 awk '/^>/{n=split($0,a,"_")} /string/{sum+=a[n]} END{print sum}' filein.fasta 无论我尝试什么,它都会造成混乱(os.system、popen、subprocess.call…) 我最后一次尝试是: string = this variable is a string like "acgactactgtcagtgctgac" provided in a loop f

我将以下命令传递到python脚本中

awk '/^>/{n=split($0,a,"_")} /string/{sum+=a[n]} END{print sum}' filein.fasta
无论我尝试什么,它都会造成混乱(os.system、popen、subprocess.call…) 我最后一次尝试是:

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中正确传递此命令?在这种情况下,引号是一个棘手的问题

请避免在
python
脚本中使用
awk
命令

我非常喜欢
awk
,但是
python
可以轻松完成
awk
所能做的事情

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

对于开始时包含
的每一行,它使用分隔符
\uu
进行拆分。它继续解析,当找到/string/时,它将拆分行的最后一个字段添加到变量
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

我有一个fasta文件。在序列的ID中有许多缩写。我需要在文件中搜索我提供变量的特定字符串的所有发生率,它必须输出abbundance值的总和。序列id的组成方式如下:“>NODE_2_length_1959_cov_102497”,我需要id行末尾的cov值之和(102497+…=sum)。我提供的字符串与ID不在同一行中,而是在上面的一行中。因此,每次他发现一种情况时,都需要将cov值存储在其上,并最终将所有cov值相加)