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

3

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)

Eu preciso cortar o ".480507" no timestamp 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 declarações de awk e cut, mas sem sucesso. Eu gostaria de encontrar um forro awk one mas sed pode ser uma solução melhor para isso. Eu não sei o suficiente sobre qualquer um quando se trata de cortar desta maneira.

NOTA: Este é um exemplo, e a parte do registro de data e hora que eu preciso cortar não será a mesma, já que preciso executar essa ação em várias linhas, todas com registros de data e hora diferentes.

    
por user53029 21.06.2016 / 16:37

3 respostas

1

Com awk provavelmente a maneira mais simples é fazer uma substituição de expressão regular no primeiro campo separado por espaço em branco, substituindo tudo do período até o final do campo:

awk '{sub(/\..*/,"",$1)}1' somefile
    
por 21.06.2016 / 16:49
2

Eu usaria o awk

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

Direcionará o primeiro campo (delimitado por espaço) e procurará um. seguido por 6 números e esvaziá-lo.

    
por 21.06.2016 / 16:53
0

com o GNU sed

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

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

sed -r 's/^(.{8}).{7} / /' filename
    
por 21.06.2016 / 18:50