Ricerca nel sito web

Come consentire ad Awk di utilizzare variabili di shell - Parte 11


Quando scriviamo script di shell, normalmente includiamo altri programmi o comandi più piccoli come le operazioni Awk nei nostri script. Nel caso di Awk, dobbiamo trovare il modo di passare alcuni valori dalla shell alle operazioni di Awk.

Questo può essere fatto utilizzando variabili di shell all'interno dei comandi Awk e in questa parte della serie impareremo come consentire ad Awk di utilizzare variabili di shell che potrebbero contenere valori che vogliamo passare ai comandi Awk.

Esistono probabilmente due modi per consentire ad Awk di utilizzare le variabili di shell:

1. Utilizzo della citazione della shell

Diamo un'occhiata a un esempio per illustrare come è possibile utilizzare effettivamente le virgolette di shell per sostituire il valore di una variabile di shell in un comando Awk. In questo esempio, vogliamo cercare un nome utente nel file /etc/passwd, filtrare e stampare le informazioni sull'account dell'utente.

Pertanto, possiamo scrivere uno script test.sh con il seguente contenuto:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Successivamente, salva il file ed esci.

Interpretazione del comando Awk nello script test.sh sopra:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – virgolette di shell usate per sostituire il valore della variabile di shell nomeutente nel comando Awk. Il valore di username è lo schema da cercare nel file /etc/passwd.

Nota che le virgolette doppie sono esterne allo script Awk, '{ print $0 }'.

Quindi rendi eseguibile lo script ed eseguilo come segue:

chmod  +x  test.sh
./text.sh 

Dopo aver eseguito lo script, ti verrà richiesto di inserire un nome utente, digitare un nome utente valido e premere Invio. Visualizzerai i dettagli dell'account dell'utente dal file /etc/passwd come di seguito:

2. Utilizzo dell'assegnazione delle variabili di Awk

Questo metodo è molto più semplice e migliore rispetto al metodo uno sopra. Considerando l'esempio sopra, possiamo eseguire un semplice comando per completare il lavoro. Con questo metodo usiamo l'opzione -v per assegnare una variabile di shell a una variabile Awk.

Per prima cosa creiamo una variabile di shell, username e assegnale il nome che vogliamo cercare nel file /etc/passswd:

username="aaronkilik"

Quindi digita il comando seguente e premi Invio:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Spiegazione del comando precedente:

  1. -v – Opzione Awk per dichiarare una variabile
  2. nomeutente – è la variabile di shell
  3. name – è la variabile Awk

Diamo uno sguardo attento a $0 ~ nome all'interno dello script Awk, ' $0 ~ nome {print $0}'. Ricorda, quando abbiamo trattato gli operatori di confronto di Awk nella parte 4 di questa serie, uno degli operatori di confronto era valore ~ modello, che significa: vero se il valore corrisponde al modello.

L'output($0) del comando cat inviato ad Awk corrisponde al modello (aaronkilik) che è il nome che stiamo cercando in /etc/passwd , di conseguenza l'operazione di confronto è vera. Sullo schermo viene quindi stampata la riga contenente le informazioni sull'account dell'utente.

Conclusione

Abbiamo trattato un'importante sezione delle funzionalità di Awk, che può aiutarci a utilizzare le variabili di shell all'interno dei comandi Awk. Molte volte scriverete piccoli programmi o comandi Awk all'interno di script di shell e quindi è necessario avere una chiara comprensione di come utilizzare le variabili di shell all'interno dei comandi Awk.

Nella prossima parte della serie Awk, ci immergeremo in un'altra sezione critica delle funzionalità di Awk, ovvero le istruzioni di controllo del flusso. Quindi rimanete sintonizzati e continuiamo a imparare e condividere.