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
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.
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.
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
Tags text-processing awk sed cut