我在Linux中有一个命令,它给出了以下输出:
1425463080:0.0000000000e + 00 0.0000000000e + 00
1425463085:0.0000000000e + 00 0.0000000000e + 00
1425463090:0.0000000000e + 00 0.0000000000e + 00
1425463095:0.0000000000e + 00 0.0000000000e + 00
...
为了使它更具人性化,我使用awk命令如下:
my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}'
现在要删除额外的:,我使用sed如下:
my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' | sed 's/://g'
有了这个,我按预期得到了以下输出:
1425463715 0.16 0.42
1425463720 0.16 0.42
1425463725 0.16 0.42
...
现在我想通过Python运行上面的命令。但是我在通过Python子进程模块运行时遇到了很多问题。例如,我面临以下错误:
('','awk:NR> 2 {printf“%s%0.2f%0.2f \ nawk:^ unterminated string \ n')
即使我将命令分配为:
cmd = """ my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;} """
subprocess.Popen(cmd, ...)
......但它仍无效。
如果我的Linux命令正确,请告诉我。如果是,那么我如何通过Python子进程执行它。
答案 0 :(得分:3)
您需要转义\n
转义序列; Python也解释了这一点;你也错过了awk命令中的结束'
单引号:
cmd = """ 'my command' | awk 'NR > 2 {printf "%s %0.2f %0.2f\\n", $1, $2, $3;}' """
或使用原始字符串:
cmd = r""" 'my command' | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' """
请注意,Python完全有能力完成这项工作,无需在中间使用额外的shell二进制来解释shell语法。