Awk만 사용하여 색상으로 Tail -f 출력을 수행하고 나머지 출력을 표시하는 방법은 무엇입니까?

Awk만 사용하여 색상으로 Tail -f 출력을 수행하고 나머지 출력을 표시하는 방법은 무엇입니까?

tail -f명령 을 사용하여 색상으로 출력 할 수 있었습니다 awk. 하지만 해당 2줄만 필터링하는 것처럼 보이기 때문에 나머지 로그를 어떻게 출력해야 할지 잘 모르겠습니다. 로그가 작성되는 동안 다른 줄도 보고 싶습니다.

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";
  • 패턴이 10이 아닌 라인(모든 라인)은 현재 라인을 인쇄하는 기본 작업으로 처리됩니다.

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

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

관련 정보