Ich habe diese Zeile:
08:30:02.480507 IP 192.168.100.150.65119 > 192.168.100.151:53 59865 [1au] A? click.em.redbox.com. (48)
Ich muss die ".480507" aus dem Zeitstempel herausschneiden, damit die Zeile folgendermaßen aussieht:
08:30:02 IP 192.168.100.150.65119 > 192.168.100.151.53: 59865 [1au] A? click.em.redbox.com. (48)
Ich habe mit mehreren awk- und cut-Anweisungen herumprobiert, aber ohne Erfolg. Ich würde gerne einen awk-Einzeiler finden, aber sed ist dafür vielleicht eine bessere Lösung. Ich weiß einfach nicht genug über beides, wenn es um das Schneiden auf diese Weise geht.
HINWEIS: Dies ist ein Beispiel und der Teil des Zeitstempels, den ich ausschneiden muss, wird nicht derselbe sein, da ich diese Aktion für mehrere Zeilen mit unterschiedlichen Zeitstempeln ausführen muss.
Antwort1
Die awk
wahrscheinlich einfachste Methode besteht darin, im ersten durch Leerzeichen getrennten Feld eine Ersetzung durch einen regulären Ausdruck durchzuführen und dabei alles vom Punkt bis zum Ende des Felds zu ersetzen:
awk '{sub(/\..*/,"",$1)}1' somefile
Antwort2
Ich würde awk verwenden
awk --posix '{ gsub(/\.[[:digit:]]{6}/, "", $1); print }' filename
Zielt auf das erste Feld (durch Leerzeichen getrennt), sucht nach einem ., gefolgt von 6 Zahlen, und leert es.
Antwort3
mit GNUsed
sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
^([^.]+)
Erfassen Sie die Startzeichenfolge bis zum ersten Punktzeichen.\.[0-9]+
Übereinstimmung mit einem Punktzeichen, gefolgt von mehr als einer Ziffer
und wenn die Anzahl der Zeichen mit der im Beispiel angegebenen übereinstimmt,
sed -r 's/^(.{8}).{7} /\1 /' filename