2013-09-01 23 views
5

私は対処したいデータセットを持っていました。私はLinuxで "awk"コマンドを実行するためのPythonコードを実行しようとしていました。私がどのように異なる議論や機能を試しても、それはうまくいかなかった。Pythonコードでawkコマンドを実行する方法

私は試みた2つの異なる方法がありますが、それらはすべて機能しませんでした。私は、これはかなりのawkを起動するよりも、実際にPythonで行わ最善であることに同意しますが、私はなぜ

1)

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

2)

#!/usr/bin/env python 
import subprocess as sp 
cmd = "awk, '{print $2 '\t' $4 '\t' $5 '\t' $6}'" 
args = cmd.split(',') 
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE) 
c = p.communicate('B3LYPD.txt') 
print c 
+0

'str.split'ではなく' shlex.split'を使用してください。 –

+7

既にPythonでプログラミングしている場合は、awkを呼び出す必要がありますか? Pythonはおそらく 'awk'から必要なものをすべてうまく処理できます。 –

+0

'c ="これを使うのではなく、文字列のリストが必要ならば、それは他の "; args = cmd.split( '、') 'ならば、単にargs = [" this "、" that "、" other "]'を使ってsplitコマンドをスキップすることができます。 –

答えて

5

を知りません。実際にこれを行う必要がある場合、実際のエラーはあなたの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 

編集:不足している引用符が修正されました。

関連する問題