461 Stimmen

Mit awk alle Spalten von der n-ten bis zur letzten Spalte ausgeben

Diese Zeile funktionierte, bis ich Leerzeichen im zweiten Feld hatte.

svn status | grep '\!' | gawk '{print $2;}' > removedProjs

Gibt es eine Möglichkeit, awk alles in $2 oder größer drucken zu lassen ($3, $4 bis wir keine Spalten mehr haben)?

Ich sollte wohl hinzufügen, dass ich dies in einer Windows-Umgebung mit Cygwin tue.

-12voto

Pila Punkte 115

Die meistgewählte Antwort von zed_0xff hat bei mir nicht funktioniert.

Ich habe ein Protokoll, in dem nach $5 mit einer IP-Adresse mehr Text oder kein Text stehen kann. Ich brauche alles von der IP-Adresse bis zum Ende der Zeile, falls nach $5 noch etwas kommt. In meinem Fall handelt es sich um ein awk-Programm und nicht um einen awk-Einzeiler, also muss awk das Problem lösen. Wenn ich versuche, die ersten 4 Felder mit der von zed_0xff vorgeschlagenen Lösung zu entfernen:

echo "  7 27.10.16. Thu 11:57:18 37.244.182.218" | awk '{$1=$2=$3=$4=""; printf "[%s]\n", $0}'

spuckt er eine falsche und unbrauchbare Antwort aus (ich habe zur Veranschaulichung [..] hinzugefügt):

[    37.244.182.218 one two three]

Es gibt sogar einige Vorschläge, substr mit dieser falschen Antwort zu kombinieren, aber das macht die Sache nur komplizierter. Es bringt keine Verbesserung.

Wenn die Spalten bis zum Schnittpunkt eine feste Breite haben und awk benötigt wird, lautet die richtige Antwort stattdessen:

echo "  7 27.10.16. Thu 11:57:18 37.244.182.218" | awk '{printf "[%s]\n", substr($0,28)}'

die das gewünschte Ergebnis liefert:

[37.244.182.218 one two three]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X