AWK - Redirection de sortie

Jusqu'à présent, nous avons affiché les données sur le flux de sortie standard. Nous pouvons également rediriger les données vers un fichier. Une redirection apparaît après leprint ou printfdéclaration. Les redirections dans AWK sont écrites comme la redirection dans les commandes shell, sauf qu'elles sont écrites dans le programme AWK. Ce chapitre explique la redirection avec des exemples appropriés.

Opérateur de redirection

La syntaxe de l'opérateur de redirection est -

Syntaxe

print DATA > output-file

Il écrit les données dans le output-file. Si le fichier de sortie n'existe pas, il en crée un. Lorsque ce type de redirection est utilisé, le fichier de sortie est effacé avant que la première sortie n'y soit écrite. Les opérations d'écriture suivantes dans le même fichier de sortie n'effacent pas le fichier de sortie, mais y ajoutent. Par exemple, l'exemple suivant écritHello, World !!! au fichier.

Créons un fichier avec des données textuelles.

Exemple

[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Old data

Maintenant, redirigeons certains contenus dedans en utilisant l'opérateur de redirection d'AWK.

Exemple

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Hello, World !!!

Ajouter un opérateur

La syntaxe de l'opérateur d'ajout est la suivante -

Syntaxe

print DATA >> output-file

Il ajoute les données dans le output-file. Si le fichier de sortie n'existe pas, il en crée un. Lorsque ce type de redirection est utilisé, de nouveaux contenus sont ajoutés à la fin du fichier. Par exemple, l'exemple suivant ajouteHello, World !!! au fichier.

Créons un fichier avec des données textuelles.

Exemple

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Old data

Maintenant, ajoutons-y du contenu à l'aide de l'opérateur append d'AWK.

Exemple

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Old data
Hello, World !!!

Tuyau

Il est possible d'envoyer la sortie à un autre programme via un tube au lieu d'utiliser un fichier. Cette redirection ouvre un canal vers la commande et écrit les valeurs des éléments via ce canal vers un autre processus pour exécuter la commande. La commande d'argument de redirection est en fait une expression AWK. Voici la syntaxe de pipe -

Syntaxe

print items | command

Laissez-nous utiliser tr commande pour convertir les lettres minuscules en majuscules.

Exemple

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

En exécutant ce code, vous obtenez le résultat suivant -

Production

HELLO, WORLD !!!

Communication bidirectionnelle

AWK peut communiquer avec un processus externe en utilisant |&, qui est une communication bidirectionnelle. Par exemple, l'exemple suivant utilisetrcommande pour convertir les lettres minuscules en majuscules. Notrecommand.awk le fichier contient -

Exemple

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   
   cmd |& getline out
   print out;
   close(cmd);
}

En exécutant ce code, vous obtenez le résultat suivant -

Production

HELLO, WORLD !!!

Le script a-t-il l'air cryptique? Démystifions-le.

  • La première déclaration, cmd = "tr [a-z] [A-Z]", est la commande à laquelle nous établissons la communication bidirectionnelle à partir d'AWK.

  • L'instruction suivante, c'est-à-dire, la commande d'impression fournit une entrée au trcommander. Ici&| indique une communication bidirectionnelle.

  • La troisième déclaration, à savoir, close(cmd, "to"), ferme le to processus après avoir concurrencé son exécution.

  • La prochaine déclaration cmd |& getline out stocke le output dans la variable out à l'aide de la fonction getline.

  • L'instruction d'impression suivante imprime la sortie et enfin le close La fonction ferme la commande.