Além de canalizar os comandos para um shell como o icarus disse corretamente, awk
pode executar um comando shell em si:
ps ax | grep apache | awk '{ system("cat /proc/"$1"/status | grep State") }'
Mas você não precisa de cat
porque grep
pode ler um arquivo como RomanPerekhrest mostrou silenciosamente:
ps ax | grep apache | awk '{ system("grep State /proc/"$1"/status") }'
E você não precisa do segundo grep
porque awk
pode ler um arquivo e corresponder a um regexp:
ps ax | grep apache | awk '{F="/proc"$1"/status";
while((getline <F)>0) if(/State/) print; close(F)}'
# if maxfiles is enough you don't need the close(F)
nem o primeiro:
ps ax | awk '/apache/{F="/proc"$1"/status";
while((getline <F)>0) if(/State/) print; close(F)}'
# ditto
Mas você não precisa realmente olhar para /proc
porque ps
já mostra o estado, embora abreviado:
ps ax | awk '/apache/{print $3}'
# or print $1,$3 to include PID like Kusalananda's ps-based answer
# or better check $5~/apache/ to avoid including processes that
# aren't _running_ apache but have apache in their _arguments_