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