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.