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 oneliner를 찾고 싶지만 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]+1개 이상의 숫자가 뒤에 오는 점 문자와 일치합니다.

예시와 같이 문자 수가 주어진다면,

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

관련 정보