Ricerca nel sito web

Come chiamare un programma esterno utilizzando awk


introduzione

Awk è un potente strumento di elaborazione del testo che può essere utilizzato per automatizzare varie attività come la manipolazione, il filtraggio e il reporting dei dati. Una delle caratteristiche interessanti di awk è la sua capacità di richiamare programmi esterni dallo script. In questo articolo esploreremo come chiamare un programma esterno utilizzando awk.

Comprensione della funzione System()

La funzione system() viene utilizzata per eseguire comandi esterni da awk. la sintassi della funzione system() è la seguente −

system(command)

L'argomento del comando è il comando esterno che vogliamo eseguire. Quando viene eseguita la funzione system(), awk passa l'argomento del comando alla shell per l'esecuzione. la shell quindi esegue il comando e restituisce lo stato di uscita ad awk.

Chiamare un programma esterno

Per chiamare un programma esterno utilizzando awk, dobbiamo specificare il comando che vogliamo eseguire come argomento della funzione system(). Ad esempio, supponiamo di voler eseguire il comando date dall'interno di uno script awk. Possiamo farlo come segue −

{ 
   system("date") 
}

In questo esempio, chiameremo il comando date utilizzando la funzione system(). Quando viene eseguito lo script, viene eseguito il comando data e sullo schermo vengono visualizzate la data e l'ora correnti.

Passaggio dell'input a un programma esterno

Possiamo passare l'input a un programma esterno utilizzando la funzione system(). Ad esempio, supponiamo di voler ordinare un elenco di numeri utilizzando il comando sort. Possiamo farlo come segue −

{ 
   print "3
1
2" | "sort" 
}

In questo esempio, stiamo utilizzando l'istruzione print per generare un elenco di numeri (3, 1, 2). Utilizzeremo quindi il simbolo della barra verticale (|) per passare questo elenco di numeri come input per il comando di ordinamento. Il comando sort ordina quindi i numeri e restituisce il risultato a awk.

Memorizzazione dell'output di un programma esterno

Possiamo memorizzare l'output di un programma esterno in una variabile utilizzando la funzione getline(). La funzione getline() viene utilizzata per leggere una riga di input da un file o da un comando. Possiamo usare la funzione getline() per acquisire l'output di un programma esterno. Ad esempio, supponiamo di voler acquisire l'output del comando ls in una variabile. Possiamo farlo come segue −

{ 
   "ls" | getline output 
   print output 
}

In questo esempio, stiamo utilizzando la funzione system() per eseguire il comando ls. Utilizzeremo quindi la funzione getline() per acquisire l'output del comando ls nella variabile di output. Infine, stiamo utilizzando l'istruzione print per visualizzare l'output del comando ls.

Passaggio di argomenti a un programma esterno

Possiamo passare argomenti a un programma esterno utilizzando la funzione system(). Ad esempio, supponiamo di voler convertire una stringa in maiuscolo utilizzando il comando tr. Possiamo farlo come segue −

{ 
   str = "hello world" 
   cmd = "echo " str " | tr '[:lower:]' '[:upper:]'" 
   cmd | getline output 
   print output 
}

In questo esempio, stiamo utilizzando il comando echo per passare la stringa "ciao mondo" come input al comando tr. Utilizzeremo quindi il comando tr per convertire la stringa in maiuscolo. Infine, stiamo utilizzando la funzione getline() per acquisire l'output del comando tr nella variabile di output.

Gestione degli errori

Quando si chiama un programma esterno utilizzando awk, è importante gestire gli errori che potrebbero verificarsi durante l'esecuzione. Possiamo verificare lo stato di uscita di un programma esterno utilizzando la funzione system(). lo stato di uscita è un numero che indica il successo o il fallimento del comando. Un valore pari a zero indica successo, mentre un valore diverso da zero indica fallimento.

Ad esempio, supponiamo di voler verificare se esiste un file utilizzando il comando test. Possiamo farlo come segue −

{ 
   file = "myfile.txt" 
   cmd = "test -e " file 
   if (system(cmd) != 0) { 
      print "File does not exist" 
   } else { 
      print "File exists" 
   } 
}

In questo esempio, stiamo utilizzando il comando test per verificare se esiste il file "myfile.txt". Utilizzeremo quindi la funzione system() per eseguire il comando di test. Se lo stato di uscita del comando test è diverso da zero, stampiamo "Il file non esiste". Altrimenti stampiamo "Il file esiste".

Esempi avanzati

  • Filtrare l'output di un programma esterno Possiamo filtrare l'output di un programma esterno utilizzando awk. Ad esempio, supponiamo di voler visualizzare solo la prima riga dell'output del comando ps. Possiamo farlo come segue −

{ 
   cmd = "ps" 
   cmd | getline output 
   close(cmd) 
   split(output, lines, "
") 
   print lines[1] 
}

In questo esempio, stiamo utilizzando la funzione getline() per acquisire l'output del comando ps nella variabile di output. Utilizzeremo quindi la funzione split() per dividere l'output in una serie di righe. Infine, stiamo utilizzando l'istruzione print per visualizzare la prima riga di output.

  • Usare le variabili awk nei comandi esterni Possiamo usare le variabili awk nei comandi esterni. Ad esempio, supponiamo di voler creare un file con un nome basato su una variabile utilizzando il comando touch. Possiamo farlo come segue −

{ 
   filename = "myfile.txt" 
   cmd = "touch " filename 
   system(cmd) 
}

In questo esempio, stiamo utilizzando la variabile filename nel comando touch per creare un file con il nome "myfile.txt".

  • Usare awk per formattare l'output di un programma esterno Possiamo usare awk per formattare l'output di un programma esterno. Ad esempio, supponiamo di voler visualizzare l'output del comando df in un formato più leggibile. Possiamo farlo come segue −

{ 
   cmd = "df -h" 
   cmd | getline output 
   close(cmd) 
   printf "%-20s%-10s%-10s%-10s%-10s%s
", "Filesystem", "Size", "Used", "Avail", "Use%", 
   "Mounted on" 
   split(output, lines, "
") 
   for (i=2; i<=length(lines); i++) { 
      printf "%-20s%-10s%-10s%-10s%-10s%s
", $1, $2, $3, $4, $5, $6 
   } 
}

In questo esempio, stiamo utilizzando l'istruzione printf per formattare l'output del comando df. Stiamo stampando una riga di intestazione con intestazioni di colonna, seguita dall'output del comando df con ciascuna colonna allineata a una larghezza fissa.

Conclusione

In questo articolo abbiamo esplorato come chiamare un programma esterno utilizzando awk. Abbiamo visto come passare l'input a un programma esterno, catturare l'output di un programma esterno e gestire gli errori che possono verificarsi durante l'esecuzione. Utilizzando la capacità di awk di richiamare programmi esterni, possiamo automatizzare varie attività e rendere i nostri script più potenti e flessibili.

Articoli correlati: