Você pode substituir system("<command> \"$0\"")
pela capacidade do awk de gravar em um processo, ou seja, print $0 | "pre;<command> \"$v\""
, onde a parte pré leria stdin na variável shell v. No bash isso seria read -r v
. Você acaba com isso, por exemplo:
awk 'BEGIN{ cmd="read -r v; ls -ld \"$v\"" }
{ print $0 | cmd; close(cmd); }'
Se você quiser lidar com coisas horríveis, como novas linhas nos nomes dos arquivos, você pode ir a rota print0 em seu find e, se o seu awk aceitar RS='%code%'
, você tem por bash:
find . -print0 |
awk -v RS='awk 'BEGIN{ cmd="read -r v; ls -ld \"$v\"" }
{ print $0 | cmd; close(cmd); }'
' '
BEGIN{ cmd="read -r -d \"\" v; ls -ld \"$v\"" }
{ print $0 "\x00" | cmd; close(cmd); }'