Angenommen, ich habe eine Datei.txt mit den folgenden Zeilen:
hello myname1 is yellow.pcapng red
festive myname33 is hddd.pcapng dfdf
crude myname44 is hello.pcapng
Jetzt ist mein Ziel, die Zeilen so zu filtern, dass die Ausgabe in out.txt wie folgt aussieht:
myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng
Jetzt weiß ich, dass ich Folgendes verwenden kann:
grep -oh "\w*myname\w*" /tmp/file.txt > /tmp/out.txt
grep -o '[^ ]\+g' /tmp/file.txt > /tmp/out.txt
um die beiden jeweiligen Teile des Ausdrucks einzeln zu erhalten. Wie kombiniere ich diese Befehle, damit ich die gewünschte Ausgabe erhalte?
Antwort1
Anhand Ihrer Beispieldaten können Sie davon ausgehen, dass Sie die Wörter Nr. 2 und 4 extrahieren möchten. In awk würden Sie dies folgendermaßen ausdrücken:
awk '{ print $2, $4 }' < /tmp/file.txt > /tmp/out.txt
Antwort2
Du könntest benutzen cut
:
cut -d' ' -f2,4 < /tmp/file.txt > /tmp/out.txt
Antwort3
Verwenden von awk statt grep.
awk '{print $2,$4}' /tmp/file.txt > /tmp/out.txt
Sie leiten die Ausgabe von cat file.txt
an weiter awk
.
Dann '{print $2,$4}'
drucken Sie mithilfe von AWK-Ausdrücken das zweite und vierte Feld der Trennzeile mit einem Leerzeichen dazwischen.
Ihr Ergebnis wird Ihren Wünschen entsprechen.
Antwort4
Da die Shell-Skript-Methode oben bereitgestellt wurde, habe ich sie in Python ausprobiert und sie hat auch gut funktioniert
#!/usr/bin/python
o=[]
k=open('i','r')
for z in k:
o.append(z.strip().split(' ')[1])
o.append(z.strip().split(' ')[3])
for d in range(0,len(o),2):
print " ".join(o[d:d+2])
Ausgabe
myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng