awk를 통해 파이프에서 수신된 입력에 접두사를 추가하고 조건부로 접두사 색상을 지정하는 방법은 무엇입니까?

awk를 통해 파이프에서 수신된 입력에 접두사를 추가하고 조건부로 접두사 색상을 지정하는 방법은 무엇입니까?

다음을 통해 수신(및 필터링)된 행에 접두사를 추가하는 방법이 있습니까 awk? 예, 알고 있습니다.그건지금까지는 조건부로(예를 들어 $PS1주변 Bash 스크립트나 변수의 존재 여부 에 따라 [ -t 1 ]) ANSI 이스케이프 시퀀스를 사용하여 색상을 지정하는 것이 가능합니까?

저는 앵커와 두세 가지 다른 방법을 사용하여 접두사를 추가하는 방법을 알고 있으며 ^Bash echoprintf.

awk인라인 스크립트 내에서 평가할 수 있는 조건에 따라 개요에 따라 생성된 출력의 색상을 어떻게 지정할 수 있습니까 awk?

참고: 내가 소유하거나 mawk내가 gawk처분할 수 있는 것이 mawk기본값입니다.

답변1

if [ -t 1 ]; then
  eval "$(printf 'COLOR_ON="\033[31m" COLOR_OFF="\033[m"')"
else
  COLOR_ON= COLOR_OFF=
fi
export COLOR_ON COLOR_OFF
awk '{print ENVIRON["COLOR_ON"] "prefix: " ENVIRON["COLOR_OFF"] $0}'

또는:

[ ! -t 1 ]
awk -v color="$?" '{
   print((color ? "\033[31m" : "") "prefix: " (color ? "\033[m" : "") $0)}'

답변2

다음을 통해 터미널을 확인할 수 있습니다.

> echo foo | awk '{if (system("tty >/dev/null 2>&1")) print "true"; else print "false";}'
true

관련 정보