python中带变量的awk命令
我将以下命令传递到python脚本中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
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值相加)