2013-09-01 14 views
5

Posiadałem zestaw danych, którymi chcę się zająć. Próbowałem uruchomić kod Pythona, aby wykonać polecenie "awk" w systemie Linux. bez względu na to, jak próbuję różnych argumentów lub funkcji, to wszystko nie działało.Jak wykonać polecenie awk za pomocą kodu Pythona

Są dwa różne sposoby, w które próbowałem, ale wszystkie nie działały. Nie wiem dlaczego

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

Użyj 'shlex.split' zamiast' str.split'. –

+7

Jeśli już programujesz w Pythonie, czy na pewno chcesz wywołać 'awk'? Python prawdopodobnie może zrobić wszystko, czego potrzebujesz z 'awk' po prostu dobrze. –

+0

Jeśli potrzebujesz listy ciągów, zamiast używać 'c =" tego, tego, innego "; args = cmd.split (',') ', możesz po prostu użyć' args = ["this", "that", "other"] 'i pominąć polecenie split. –

Odpowiedz

5

Chociaż zgadzam się, że jest to faktycznie najlepiej zrobić w Pythonie, zamiast wywoływania awk. Jeśli naprawdę musisz to zrobić, to aktualny błąd dotyczy Twojego 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 

Edytuj: Naprawiono brakujący cytat.

Powiązane problemy