GNU/Linux >> Linux Esercitazione >  >> Linux

Come catturare un file da Awk?

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

Vorrei fare una cosa del genere? (apri un file il cui nome è in una variabile awk).
Come si fa?

Risposta accettata:

Il problema è che system() passa la riga di comando a una shell, quindi nel caso generale è necessario eseguire l'escape di tutti i caratteri speciali della shell nel nome del file.

awk ha un array associativo ENVIRON mappato sull'ambiente che ha ricevuto, ma sfortunatamente l'assegnazione non influisce sull'ambiente dei comandi eseguiti tramite system o 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))
   }'

Ovviamente, se il file è "a.txt" o puoi assicurarti che il suo percorso non contenga mai caratteri speciali della shell, puoi farla franca:

system("cat " file)

Se puoi assicurarti che non contenga virgolette singole, puoi fare:

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

Linux
  1. Come rimuovere la Bom da un file Utf-8?

  2. Come leggere una variabile da un file?

  3. Come creare e interrogare un file system BTRFS

  4. Come rimuovo le nuove righe da un file di testo?

  5. Come unire due file usando AWK?

Come aggiornare da RHEL 7 a RHEL 8

Come creare directory da un file di testo in Linux

Come rimuovere la password da un file PDF in Linux

Come rimuovere (^M) caratteri da un file in Linux

Come controllare/riparare il file system Linux all'avvio

Come riparare gli errori del file system in Linux Mint