Como eu adicionaria um prefixo à entrada que recebo de um pipe via awk e colore o prefixo condicionalmente?

5

Existe uma maneira de adicionar um prefixo às linhas recebidas (e filtradas) via awk - sim, eu sei que é possível até agora - e então condicionalmente (por exemplo, com base na existência do $PS1 variável do script Bash circundante ou [ -t 1 ] ) colori-lo usando seqüências de escape ANSI?

Eu sei adicionar um prefixo usando a âncora ^ e duas ou três outras maneiras e sei como usar sequências de escape no Bash echo e printf .

Como - se possível - posso colorir a saída produzida por awk como descrito, com base em uma condição que pode ser avaliada dentro de um script awk in-line?

NB: tenho mawk ou gawk à minha disposição, mawk é o padrão.

    
por 0xC0000022L 05.06.2014 / 03:06

2 respostas

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

Ou:

[ ! -t 1 ]
awk -v color="$?" '{
   print((color ? "3[31m" : "") "prefix: " (color ? "3[m" : "") $0)}'
    
por 05.06.2014 / 07:47
0

Você pode verificar um terminal dessa maneira:

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