awk para cortar parte de un campo y aún imprimir la línea completa

awk para cortar parte de un campo y aún imprimir la línea completa

Tengo esta línea:

08:30:02.480507 IP 192.168.100.150.65119 > 192.168.100.151:53 59865 [1au] A? click.em.redbox.com. (48)

Necesito cortar el ".480507" en la marca de tiempo para que la línea se vea así:

08:30:02 IP 192.168.100.150.65119 > 192.168.100.151.53: 59865 [1au] A? click.em.redbox.com. (48)

He buscado a tientas varias declaraciones extrañas y cortadas, pero fue en vano. Me gustaría encontrar una línea awk, pero sed puede ser una mejor solución para esto. Simplemente no sé lo suficiente sobre ninguno de los dos cuando se trata de cortar de esta manera.

NOTA: Este es un ejemplo y la parte de la marca de tiempo que necesito cortar no será la misma, ya que necesito realizar esta acción en varias líneas, todas con diferentes marcas de tiempo.

Respuesta1

Probablemente awkla forma más sencilla sea hacer una sustitución de expresión regular en el primer campo separado por espacios en blanco, reemplazando todo desde el punto hasta el final del campo:

awk '{sub(/\..*/,"",$1)}1' somefile

Respuesta2

yo usaría awk

awk --posix '{ gsub(/\.[[:digit:]]{6}/, "", $1); print }' filename

Se centrará en el primer campo (delimitado por espacios) y buscará un archivo . seguido de 6 números y vacíelo.

Respuesta3

con GNUsed

sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
  • ^([^.]+)capturar la cadena inicial hasta el primer carácter de punto
  • \.[0-9]+coincidir con el carácter de punto seguido de caracteres de más de 1 dígito

y si el número de caracteres es consistente como se indica en el ejemplo,

sed -r 's/^(.{8}).{7} /\1 /' filename

información relacionada