fonction system() awk passe la chaîne à/bin/sh, de sorte que vous pouvez utiliser redirect les opérateurs, comme "> file.out" si vous voulez.
awk '{system("command " $1 " " $2 " " $3 ">" $1 ".out");}'
Editer: ok, par sauvegarder, vous voulez dire dans une variable awk. éphémient est sur la bonne voie, alors. C'est ce que fait getline d'awk, comme les backticks ou $ (cmd) dans shell/perl. En fait, google pour backticks awk trouvé ceci: http://www.omnigroup.com/mailman/archive/macosx-admin/2006-May/054665.html
Vous dites que vous ne pouvez pas utiliser getline parce que vous ne pouviez pas canaliser. Mais vous pouvez contourner cela avec des astuces de tee et de descripteur de fichier. Cela fonctionne si/bin/sh est bash:
{ "set +o posix; command " $1 " " $2 " " $3 " | tee >(grep foo)" | getline var; print toupper(var); } # bash-only, and broken.
set +o posix
est nécessaire parce que awk fonctionne bash comme sh
, ce qui en fait passer en mode posix après lecture de ses fichiers de démarrage. Hmm, je n'ai pas de chance pour que ça marche, et ça demande de l'argent de toute façon.
Ok, cela fonctionne:
$ touch foo bar
$ echo "foo bar" |
awk '{ "{ ls " $1 " " $2 " " $3 " | tee /dev/fd/10 | grep foo > /dev/tty; } 10>&1" | getline var; print toupper(var); }'
foo
BAR
ce script est bash. quand j'utilise getline je ne peux pas canaliser la commande, par exemple cat fichier | paramètres de processus, je reçois seulement le fichier chat. Je le fais pour plus de façons propres de faire cette tâche ... – llazzaro
Quel 'awk'? Cela fonctionne ici, avec GNU Awk 3.1.7. – ephemient
les 10 dernières lignes ont répondu à ma question – llazzaro