Awk trailing -f를 사용하여 출력 색상만 지정하고 나머지 출력은 표시하려면 어떻게 해야 합니까?

Awk trailing -f를 사용하여 출력 색상만 지정하고 나머지 출력은 표시하려면 어떻게 해야 합니까?

tail -f이 명령을 사용하면 컬러 출력을 얻을 수 있습니다 awk. 하지만 로그의 나머지 부분은 해당 두 줄만 필터링하는 것 같기 때문에 어떻게 출력해야 할지 잘 모르겠습니다. 또한 로그에 기록되는 다른 줄도 보고 싶습니다.

awk나머지 출력을 표시하려면 명령에 무엇을 입력해야 합니까 ?

내 문제의 그림. 위의 빨간색 텍스트는 사용되지 않으며 awk전체를 표시합니다 tail -f log. 아래는 색상 필터링과 동일한 명령입니다 awk.

여기에 이미지 설명을 입력하세요.

답변1

일치하는 라인을 장식으로 인쇄하는 대신 일치하는 라인을 장식하고 모든 것을 인쇄합니다.

awk '/User@Host:/ { $0 = "\033[32m" $0 "\033[39m" }; /Query_time:/ { $0 = "\033[29m" $0 "\033[39m" }; 1'

awk프로그램은 세 가지 모드와 관련 작업으로 구성됩니다.

  • 일치하는 줄은 현재 줄 주위에 주어진 이스케이프 코드로 User@Host:처리됩니다 .$0 = "\033[32m" $0 "\033[39m"
  • 일치하는 줄은 Query_time:다음과 같이 처리됩니다 $0 = "\033[29m" $0 "\033[39m".
  • 0이 아닌 모드 의 줄 1(즉, 모든 줄)은 현재 줄을 인쇄하는 기본 작업을 사용하여 처리됩니다.

이는 누적됩니다. 패턴이 현재 행과 일치하는 모든 작업은 정의된 순서로 실행됩니다. User@Host:줄 일치를 수정하고(첫 번째 작업) 인쇄합니다(세 번째 작업). Query_time:줄 일치를 수정하고(두 번째 작업) 인쇄합니다(세 번째 작업). 둘 다 일치하지 않는 줄을 인쇄합니다(세 번째 작업).

이는 라인이 처리되었는지 여부를 추적하지 않고 모든 라인을 인쇄하는 가장 간단한 기술입니다(라인을 두 번 인쇄하는 것을 피하기 위해). 각 작업 명령문 세트에서 무언가를 인쇄하는 대신 필요에 따라 현재 행을 수정하고 한 번만 인쇄합니다(그러나 항상 인쇄합니다).

관련 정보