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]