AWK Mehrfachtrennzeichen
Ich habe eine Datei, die folgenden Zeilen enthalten:
/logs/tc0001/tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com
/logs/tc0001/tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com
/logs/tc0001/tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com
In der obigen Ausgabe, die ich extrahieren möchte 3 Felder (Nummer 2, 4 und die Letzte *.example.com
). Ich bekomme die folgende Ausgabe:
cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001 tomcat7.1
tc0001 tomcat7.2
tc0001 tomcat7.5
Wie kann ich auch extrahieren Letzte Feld mit domain-Namen, die nach '='
? Wie verwende ich multiple delimiter
zu extrahieren Feld?
Kommentar zu dem Problem
Um meine Frage zu beantworten, die gleichen gleichen aber anders,
awk
wurde schlucken Felder, wenn Sie waren leer, die foobarred Bereich Nummerierung. Ich änderte die -F " "
in -F "[ ]"
und awk
nicht schlucken Sie die leeren Felder mehr. InformationsquelleAutor der Frage Satish | 2012-08-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Trennzeichen kann ein regulärer Ausdruck.
Produziert:
InformationsquelleAutor der Antwort embedded.kyle
Gute Nachricht!
awk
Feld Trennzeichen kann ein regulärer Ausdruck. Sie brauchen nur zu verwenden-F"<separator1>|<separator2>|..."
:Gibt:
Hier:
-F="/|="
setzt das Eingabefeld separator entweder/
oder=
. Dann wird die Ausgabe Feld-Trennzeichen ein tab.{print $3, $5, $NF}
druckt die 3., 5. und letzten Felder auf der Grundlage der input field separator.Siehe ein weiteres Beispiel:
Diese Datei hat zwei Felder, Trennzeichen
#
und_
. Wenn wir wollen, drucken Sie das zweite Feld unabhängig von dem separator wird der eine oder andere, wir machen beide Separatoren!Wo die Dateien sind wie folgt nummeriert:
InformationsquelleAutor der Antwort fedorqui
Wenn Ihr whitespace ist konsistent, die Sie nutzen könnten, als ein Trennzeichen, auch anstelle von einfügen
\t
direkt, Sie können die Ausgabe-Trenner und es wird automatisch eingeschlossen:InformationsquelleAutor der Antwort Thor
Perl-one-liner:
Diese command-line Optionen werden verwendet:
-n
Schleife um jede Zeile der input-Datei, setzen Sie die Zeile in der$_
variable nicht automatisch ausdrucken jeder Zeile-l
entfernt, die Zeilenumbrüche vor der Verarbeitung ist, und fügt Sie danach wieder in-a
automatisches aufteilen in mode – perl wird automatisch getrennt, Eingabe-Linien in der@F
array. Standardmäßig Teilung auf Leerzeichen-F
automatisches aufteilen in-Modifikator in diesem Beispiel verteilt auf beiden/
oder=
-e
Ausführung der perl-codePerl ist eng mit awk, aber die
@F
automatisches aufteilen in array beginnt bei index$F[0]
während awk-Felder beginnen mit $1.InformationsquelleAutor der Antwort Chris Koknat
Für ein Feld-Trennzeichen in beliebiger Anzahl
2
durch5
oder Briefa
oder#
oder ein Raum, in dem der trennende Charakter muss wiederholt werden, mindestens 2 mal und nicht mehr als 6-mal, zum Beispiel:Ich bin sicher, dass Variationen existieren, mit ( ) und Parameter
InformationsquelleAutor der Antwort genome
Sehe ich viele gute Antworten sind bis auf das board, möchte aber trotzdem meine Dateien hochladen Stück code zu,
awk -F"/" '{print $3 " " $5 " " $7}' sam | sed 's/cat.* =//g'
InformationsquelleAutor der Antwort Sadhun