awk para cortar parte de um campo e ainda imprimir a linha inteira

awk para cortar parte de um campo e ainda imprimir a linha inteira

Eu tenho esta linha:

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

Preciso cortar o ".480507" no carimbo de data/hora para que a linha fique assim:

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

Eu me atrapalhei com várias instruções awk e cut, mas sem sucesso. Eu gostaria de encontrar um forro awk, mas sed pode ser uma solução melhor para isso. Eu simplesmente não sei o suficiente sobre nenhum deles quando se trata de cortar dessa maneira.

NOTA: Este é um exemplo, e a parte do carimbo de data/hora que preciso cortar não será a mesma, pois preciso executar esta ação em várias linhas, todas com carimbos de data/hora diferentes.

Responder1

Provavelmente awka maneira mais simples é fazer uma substituição de expressão regular no primeiro campo separado por espaços em branco, substituindo tudo, desde o ponto final até o final do campo:

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

Responder2

eu usaria o awk

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

Terá como alvo o primeiro campo (delimitado por espaço) e procurará por um arquivo . seguido por 6 números e esvazie-o.

Responder3

com GNUsed

sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
  • ^([^.]+)captura a string inicial até o primeiro caractere de ponto
  • \.[0-9]+corresponder ao caractere de ponto seguido por mais de 1 caractere de dígito

e se o número de caracteres for consistente conforme fornecido no exemplo,

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

informação relacionada