GNU/Linux >> Tutoriels Linux >  >> Linux

Comment Cater un fichier depuis Awk ?

END {
file = "a.txt"
system(cat file)
}

Je souhaite faire quelque chose comme ça? (ouvrir un fichier dont le nom est dans une variable awk).
Comment ça se fait ?

Réponse acceptée :

Le problème est que system() passe la ligne de commande à un shell, donc dans le cas général, vous devez échapper tous les caractères spéciaux du shell dans le nom du fichier.

awk a un tableau associatif ENVIRON qui est mappé à l'environnement qu'il a reçu, mais malheureusement, l'assignation à celui-ci n'affecte pas l'environnement des commandes exécutées via system ou getline

awk -v q="'" '
   function escape(str) {
     gsub(q, q "\" q q, str)
     return q str q
   }
   BEGIN {
     file = "a.txt"
     system("cat " escape(file))
   }'

Bien sûr, si le fichier est "a.txt" ou si vous pouvez vous assurer que son chemin ne contiendra jamais de caractères spéciaux du shell, vous pouvez vous en tirer :

system("cat " file)

Si vous pouvez vous assurer qu'il ne contient pas de guillemets simples, vous pouvez :

system("cat '''" file "'''")

Linux
  1. Comment supprimer le Bom d'un fichier UTF-8 ?

  2. Awk de différentes lignes ?

  3. Comment lire une variable à partir d'un fichier ?

  4. En quoi install -c est différent de cp

  5. en quoi cp -f est-il différent de cp --remove-destination ?

Comment mettre à niveau de RHEL 7 vers RHEL 8

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment supprimer le mot de passe d'un fichier PDF sous Linux

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment vérifier/réparer le système de fichiers Linux au démarrage

Comment réparer les erreurs du système de fichiers dans Linux Mint