Wie wähle ich die erste Spalte aus der durch TAB getrennten Zeichenfolge aus?
# echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F'\t' '{print $1}'
Das Obige gibt die gesamte Zeile zurück und nicht nur "LOAD_SETTLED" wie erwartet.
Aktualisieren:
Ich muss die dritte Spalte in den tabulatorgetrennten Werten ändern. Folgendes funktioniert nicht.
echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt
Dies funktioniert jedoch wie erwartet, wenn das Trennzeichen ein Komma anstelle eines Tabulators ist.
echo $line | awk -v var="$mycol_new" -F'\t' '{print $1 "," $2 "," var "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "}' >> /pdump/temp.txt
awk 'BEGIN {FS="\t"}; {print $1,FS,$2,FS,$3}' myFile.txt
Tabulatorgetrennte Werte der ersten drei Spalten zu drucken.awk 'BEGIN {OFS="\t"}; {print $1,$2,$3}'
-v
Einstellen von Variablen. Die VerwendungBEGIN {FS="\t"}
in einem Inline-Programm ist hässlich , und jeder Open-Source-Beitrag, den Sie auf diese Weise leisten möchten, wird wahrscheinlich beanstandet. Tun Sie das nur, wenn Sie eine Programmdatei schreiben . Es wird auch davon abgeraten,-F
statt zu verwenden,-v FS=
da letzteres klarstellt, dass nurFS
gesetzt wird und nichtOFS
. Die Verwirrung über diesen letzten Punkt hat diesen Beitrag überhaupt erst verursacht. Deshalb ist "guter Stil" wichtig.OFS
Variable geben Sie ein Ausgabefeldtrennzeichen an .Antworten:
Sie müssen die
OFS
Variable (Ausgabefeldtrennzeichen) als Registerkarte festlegen :(Stellen Sie sicher, dass Sie die
$line
Variable in der Echo-Anweisung angeben.)quelle
$
in$'\t'
nicht benötigt wird . Gregs Wiki ist besser: "Von diesen$'...'
ist es das häufigste und verhält sich wie einfache Anführungszeichen, mit der Ausnahme, dass Kombinationen mit Backslash-Escapezeichen gemäß dem ANSI C-Standard erweitert werden."$'\t'
nicht nötig. awk versteht die Zeichenfolge"\t"
als Tabulatorzeichenawk -F $'\t' 'BEGIN {OFS = FS} …'
. Das sollte seinawk -v FS='\t' -v OFS='\t' '…'
. Es mag pedantisch erscheinen, aber inkonsistent zu sein erhöht die Wahrscheinlichkeit, dass ein späterer Mitwirkender einen Fehler einführt, weil er Ihren Code falsch versteht.Stellen Sie sicher, dass sie wirklich Tabs sind! In bash können Sie mit ein Tab einfügenC-v TAB
quelle
Sie können das Feldtrennzeichen einstellen:
Ausgezeichnete Lektüre:
https://docs.freebsd.org/info/gawk/gawk.info.Field_Separators.html
quelle
Ich verwende die Variablen
FS
undOFS
, um BIND-Zonendateien zu bearbeiten, die durch Tabulatoren getrennt sind. Hier ist eines meiner Skripte https://gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39Das Fleisch davon ist:
Dies ist eine saubere und leicht zu lesende Methode, um dies zu tun.
quelle
quelle
Sollte das nicht funktionieren?
quelle