So fügen Sie die Ausgabe von stdout direkt in numpy.loadtxt ein, wenn Sie die von awk mit python numpy verarbeiteten Daten analysieren möchten.
Angenommen, Sie haben Daten zu Name, Größe und Gewicht.
input.dat
Yamada 160 50
Tanaka 170 60
Sakana 180 70
Angenommen, Sie möchten nur den numerischen Teil extrahieren und Größe und Gewicht in Beziehung setzen. Python kann das, aber es ist umständlich, wenn die Datei größer wird. Verwenden Sie also awk und numpy.loadtxt, um die numerischen Daten zu lesen. Mit anderen Worten, es sieht so aus.
$ cat input.dat | awk '{print $2, $3}' > tmp.dat
$ python analysis.py tmp.dat
analysis.py
import sys
import numpy as np
data = np.loadtxt(sys.argv[1])
#Danach analysierte ich es durcheinander
Es ist jedoch schwierig, eine Zwischendatei zu erhalten. Ich möchte, dass es so aussieht.
$ python analysis.py input.dat
Verwenden Sie zunächst den Unterprozess, um Shell-Befehle in Python zu verwenden. Fügen Sie die endgültige Ausgabe in subprocess.PIPE und in numpy.loadtxt ein.
analysis.py
import sys
import subprocess
import numpy as np
p1 = subprocess.Popen(["cat", sys.argv[1]], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["awk", "{print $2, $3}"], stdin=p1.stdout, stdout=subprocess.PIPE)
data = np.loadtxt( p2.stdout )
#Danach analysierte ich es durcheinander
Das obige Skript hat Shell-Befehle in Python geschrieben, jedoch aufgrund von Umständen wie dem Inhalt des awk-Skripts, der jedes Mal anders ist.
$ cat input.dat | awk '{print $2, $3}' | python analysis.py
Wenn Sie eine Verbindung mit einer solchen Pipe herstellen möchten, verwenden Sie fileinput
.
analysis.py
import numpy as np
import fileinput
data = np.loadtxt(fileinput.input())
#Danach analysierte ich es durcheinander