필드의 일부를 잘라내고 전체 줄을 인쇄하는 awk

필드의 일부를 잘라내고 전체 줄을 인쇄하는 awk

나는 다음 줄을 가지고 있습니다 :

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

타임스탬프에서 ".480507"을 잘라서 줄이 다음과 같이 보이도록 해야 합니다.

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

나는 몇 가지 awk 및 cut 진술을 더듬었지만 소용이 없었습니다. 나는 awk one liner를 찾고 싶지만 sed가 이에 대한 더 나은 솔루션일 수 있습니다. 나는 이런 방식으로 자르는 것에 관해서는 둘 중 하나에 대해 충분히 알지 못합니다.

참고: 이는 하나의 예이며, 타임스탬프가 모두 다른 여러 줄에서 이 작업을 수행해야 하기 때문에 잘라내야 하는 타임스탬프 부분은 동일하지 않습니다.

답변1

아마도 awk가장 간단한 방법은 공백으로 구분된 첫 번째 필드에서 정규식 대체를 수행하여 마침표부터 필드 끝까지 모든 것을 바꾸는 것입니다.

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

답변2

나는 awk를 사용할 것이다

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

첫 번째 필드(공백으로 구분)를 대상으로 하고 . 그다음에 6개의 숫자를 입력하고 비워주세요.

답변3

GNU와 함께sed

sed -r 's/^([^.]+)\.[0-9]+ /\1 /' filename
  • ^([^.]+)시작 문자열을 첫 번째 도트 문자까지 캡처
  • \.[0-9]+점 문자 뒤에 2개 이상의 숫자 문자가 오는 일치

예와 같이 문자 수가 일정하면

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

관련 정보