9

我需要编写一个 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")

它在第 8 行出现错误: SyntaxError: unexpected character after line continuation character

有没有办法让 awk 命令在 python 脚本中工作?谢谢

4

2 回答 2

11

您在该字符串中有两种类型的引号,因此在整个内容中使用三引号

>>> 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'
于 2013-05-21T16:45:29.273 回答
8

您应该使用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)

正如 TehTris 所指出的,问题中引号的排列将命令字符串分成多个字符串。预先格式化命令并转义双引号可以解决此问题。

于 2013-05-21T16:44:04.907 回答