Ich habe einPSVDatei test1.psv mit drei Datenspalten wie unten, wenn geöffnet vonawk, zeigt Daten in einer einzelnen Spalte an.
xxxx|0001|rose
yyyy|8768|lotus
fgsh|6543|lilly
eigentlich sollte dies die "|" abgegrenzte Datei mit 3 Spalten sein, aber wenn ich print $1
, kommen alle Spalten als erste Spalte wie unten
cat test1.psv |awk '{print $1}'
Ausgänge:
xxxx|0001|rose
yyyy|8768|lotus
fgsh|6543|lilly
aber das Ergebnis sollte sein:
xxxx
yyyy
fgsh
Wenn wir das tun print $2
, sollte das Ergebnis sein:
0001
8768
6543
Antwort1
Sie müssen einen Feldtrenner wie |
folgt festlegen -F
(Sie brauchen auch kein cat
):
$ awk -F '|' '{print $1}' test1.csv
xxxx
yyyy
fgsh
$ awk -F '|' '{print $2}' test1.csv
0001
8768
6543
$ awk -F '|' '{print $3}' test1.csv
rose
lotus
lillyw
(Beachten Sie, dass $
hier einEingabeaufforderung
wird verwendet, um den Beginn einer neuen Zeile anzuzeigen, ist nicht Teil des Befehls).
-F
wird angegeben durchPOSIXund sollte tragbar sein.
Antwort2
awkgeht davon aus, dass eine Datei durch Tabulatoren getrennt ist oder aus einer Zeichenfolge mit einem oder mehreren Leerzeichen besteht. Um also eine durch Pipes getrennte Wertedatei zu verwenden, teilen wir awk mit, dass unsere Felder durch das senkrechte Strichzeichen | getrennt sind.
Aus dem ersten Link im obigen Satz:
Der Wert von (dem Feldtrennzeichen) kann im awk-Programm mit dem Zuweisungsoperator '=' geändert werden (siehe Abschnitt Zuweisungsausdrücke). Der richtige Zeitpunkt hierfür ist häufig zu Beginn der Ausführung, bevor eine Eingabe verarbeitet wurde, sodass der allererste Datensatz mit dem richtigen Trennzeichen gelesen wird. Verwenden Sie dazu das spezielle BEGIN-Muster (siehe Abschnitt Die speziellen Muster BEGIN und END).
Hier setzen wir beispielsweise den Wert des FeldtrennzeichensFS) in die Zeichenfolge "|" ein:
cat test1.psv | awk 'BEGIN { FS = "|" } ; { print $1 }'
Antwort3
um einfach nur eine bestimmte Spalte einer durch Trennzeichen getrennten Datei zurückzugeben, geben Sie dies ein
cut -d'|' -f1 test1.csv
um das Feld 1 zurückzugeben ... ändern Sie oben zu -f2, um die 2. Spalte zurückzugeben ... der Parameter -d definiert in diesem Fall das Trennzeichen „|“
Es ist üblich, eine Pipeline aus vielen Befehlen zu erstellen, die über die Pipe miteinander verbunden sind. Daher kann das obige auch geschrieben werden
cat test1.csv | cut -d'|' -f1
Antwort4
awk -F "|" '{print $1}' p.txt ===============> To get first column
awk -F "|" '{print $2}' p.txt===================> To get second column
python
Below python code drives first and second column
#!/usr/bin/python
k=open('p.txt','r')
for i in k:
print " ".join(i.split("|")[0:2])