awk öffnet Pipe Separated Value-Datei mit Daten in einer einzigen Spalte, nicht drei

awk öffnet Pipe Separated Value-Datei mit Daten in einer einzigen Spalte, nicht drei

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).

-Fwird 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])

verwandte Informationen