Estou tentando realizar um grep dentro do awk usando system() que segundo o manual deve retornar o código de saída do comando que está sendo executado.
$ cat foo.txt
bar
$ grep -q bar foo.txt; echo $?
0
$ awk 'BEGIN{ if ( system( "grep -q bar foo.txt" ) ) { print "yes" } else { print "no" } }'
no
Se eu remover o -q
, posso ver que o grep está realmente encontrando bar
, portanto, deve sair 0 e, portanto, imprimir sim, não?
$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no
Removendo completamente grep
da equação:
$ awk 'BEGIN{ if ( system( "true" ) ) { print "yes" } else { print "no" } }'
no
No shell, o código de saída 0 significa sucesso de um comando e qualquer outro, falha (e seu motivo). Isso é o que
system
retorna: 0 para sucesso, masawk
interpreta isso como FALSE. Você precisa inverter a lógica.