我需要编写一个python脚本,我需要在其中调用一些awk命令.
#!/usr/bin/python
import os, sys
input_dir = '/home/abc/data'
os.chdir(input_dir)
#wd=os.getcwd()
#print wd
os.system ("tail -n+2 ./*/*.tsv|cat|awk 'BEGIN{FS="\t"};{split($10,arr,"-")}{print arr[1]}'|sort|uniq -c")
Run Code Online (Sandbox Code Playgroud)
它在第8行给出错误:SyntaxError:行继续符后的意外字符
有没有办法让awk命令在python脚本中运行?谢谢
Teh*_*ris 10
你在该字符串中有两种类型的引号,因此在整个事物中使用三引号
>>> x = '''tail -n+2 ./*/*.tsv|cat|awk 'BEGIN{FS="\t"};{split($10,arr,"-")}{print arr[1]}'|sort|uniq -c'''
>>> x
'tail -n+2 ./*/*.tsv|cat|awk \'BEGIN{FS="\t"};{split($10,arr,"-")}{print arr[1]}\'|sort|uniq -c'
Run Code Online (Sandbox Code Playgroud)
您应该使用subprocess
而不是os.system
:
import subprocess
COMMAND = "tail -n+2 ./*/*.tsv|cat|awk 'BEGIN{FS=\"\t\"};{split($10,arr,\"-\")}{print arr[1]}'|sort|uniq -c"
subprocess.call(COMMAND, shell=True)
Run Code Online (Sandbox Code Playgroud)
正如TehTris指出的那样,问题中引号的排列将命令字符串分成多个字符串.预格式化命令并转义双引号可以解决这个问题.
归档时间: |
|
查看次数: |
34952 次 |
最近记录: |