Unix에서 애플리케이션 로그 형식을 지정하고 싶습니다.

Unix에서 애플리케이션 로그 형식을 지정하고 싶습니다.

다음과 같은 로그 파일이 있습니다.

[loggerid:1234-4567] api:api1() 5.91
[loggerid:7899-45671234] api:api12345() 11.00
[loggerid:3333-45671234564] api:api12345789() 11.05

다음과 같은 출력이 필요합니다.

  • 첫 번째 열은 :과 사이의 문자열 이어야 합니다.-
  • 두 번째 열은 :과 사이의 문자열 이어야 합니다.(
  • 열 3 > 10인 행만 필요합니다.
  • 모든 열의 너비는 고정되어 있어야 합니다.
7899 api12345    11.0 
3333 api12345789 11.05

답변1

awk모든 행이 정확한 패턴을 따른다고 가정하면 및 조합을 사용할 수 있습니다 column(두 번째 행은 고정 너비 필드를 얻는 데 도움이 됩니다).

$ awk -F'[-: (]' '$NF>10{print $2,$5,$NF}' log | column -t
7899  api12345     11.00
3333  api12345789  11.05

설명하다

* awk -F'[-: (]': awk의 필드 구분 기호를 -, :또는 공백 (중 하나로 설정합니다. 이를 통해 필드로 원하는 하위 문자열을 찾을 수 있습니다.

  • $NF>10: 마지막 필드( NF필드 수와 $NF마지막 필드의 값)가 10보다 큰 경우.
  • print $2,$5,$NF:: 두 번째 필드(이 경우 첫 번째와 첫 번째 사이의 값), 다섯 번째 필드(여기에서는 -두 번째와 첫 번째 사이의 값) 및 마지막 필드를 인쇄합니다.:(

awk마지막으로 출력을 column -t고정 너비 테이블로 파이프합니다.

-줄에 , :또는 공백의 조합이 다른 경우에는 이 기능이 작동하지 않습니다.(

관련 정보