Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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_Linux - Fatal编程技术网

如何用python代码执行awk命令

如何用python代码执行awk命令,python,linux,Python,Linux,我有一组数据要处理。我试图运行python代码在linux中执行“awk”命令。无论我如何尝试不同的参数或函数,都没有成功 我试过两种不同的方法,但都不管用。我不知道为什么 (一) (二) 虽然我同意这实际上最好用Python来完成,而不是调用awk。如果您确实需要这样做,那么实际的错误在于您的awk #!/usr/bin/env python import subprocess as sp args = ["awk", r'{OFS="\t"; print $2,$4,$5,$6}', "B3

我有一组数据要处理。我试图运行python代码在linux中执行“awk”命令。无论我如何尝试不同的参数或函数,都没有成功

我试过两种不同的方法,但都不管用。我不知道为什么

(一)

(二)


虽然我同意这实际上最好用Python来完成,而不是调用awk。如果您确实需要这样做,那么实际的错误在于您的awk

#!/usr/bin/env python
import subprocess as sp
args = ["awk", r'{OFS="\t"; print $2,$4,$5,$6}', "B3LYPD.txt"]
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )
print(p.stdout.readline()) # will give you the first line of the awk output

编辑:修复缺少的引号。

您可以使用三重引号定义命令,然后在子流程中使用shell=True

#!/usr/bin/env python
import subprocess as sp
cmd = """awk '{print $2"\t"$4"\t"$5"\t"$6}' B3LYPD.txt"""
p = sp.Popen(cmd, stdin=sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE,shell=True)
for l in p.stdout:
        print (l.decode())

使用
shlex.split
而不是
str.split
。如果您已经在用Python编程,是否确实需要调用
awk
?Python可能可以从
awk
中完成您需要的所有事情,如果您需要字符串列表,而不是使用
c=“this,that,other”;args=cmd.split(',')
,您可以使用
args=[“this”、“that”、“other”]
跳过split命令。另外,Lev的评论是对的,如果您的代码代表了实际的
awk
模式,您应该能够逐行读取文本文件并使用
split()
函数选择列。
#!/usr/bin/env python
import subprocess as sp
args = ["awk", r'{OFS="\t"; print $2,$4,$5,$6}', "B3LYPD.txt"]
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )
print(p.stdout.readline()) # will give you the first line of the awk output
#!/usr/bin/env python
import subprocess as sp
cmd = """awk '{print $2"\t"$4"\t"$5"\t"$6}' B3LYPD.txt"""
p = sp.Popen(cmd, stdin=sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE,shell=True)
for l in p.stdout:
        print (l.decode())