Scopri come utilizzare variabili Awk, espressioni numeriche e operatori di assegnazione - Parte 8
Credo che la serie di comandi Awk stia diventando entusiasmante, nelle sette parti precedenti abbiamo illustrato alcuni fondamenti di Awk che devi padroneggiare per poter eseguire alcuni filtri di testo o stringhe di base in Linux.
A partire da questa parte, approfondiremo le aree avanzate di Awk per gestire operazioni più complesse di filtraggio di testo o stringhe. Pertanto, tratteremo le funzionalità di Awk come variabili, espressioni numeriche e operatori di assegnazione.
Questi concetti non sono del tutto distinti da quelli che probabilmente potresti aver incontrato in molti linguaggi di programmazione prima di tali shell, C, Python e molti altri, quindi non c'è bisogno di preoccuparsi molto di questo argomento, stiamo semplicemente rivedendo le idee comuni sull'uso queste caratteristiche menzionate.
Questa sarà probabilmente una delle sezioni dei comandi Awk più facili da comprendere, quindi siediti e andiamo avanti.
1. Variabili Awk
In qualsiasi linguaggio di programmazione, una variabile è un segnaposto che memorizza un valore, quando crei una variabile in un file di programma, mentre il file viene eseguito, viene creato uno spazio in memoria che memorizzerà il valore specificato per la variabile.
Puoi definire le variabili Awk nello stesso modo in cui definisci le variabili di shell, come segue:
variable_name=value
Nella sintassi sopra:
nome_variabile
: è il nome che dai a una variabilevalue
: il valore memorizzato nella variabile
Diamo un’occhiata ad alcuni esempi di seguito:
computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”
Dai un'occhiata ai semplici esempi sopra, nella prima definizione della variabile, il valore linux-console.net
è assegnato alla variabile nome_computer
.
Inoltre alla variabile port_no
viene assegnato il valore 22
, è anche possibile assegnare il valore di una variabile ad un'altra variabile come nell'ultimo esempio dove abbiamo assegnato il valore di nome_computer
al server delle variabili.
Se ricordi, proprio dalla parte 2 di questa serie di Awk in cui abbiamo parlato della modifica dei campi, abbiamo parlato di come Awk divide le righe di input in campi e utilizza l'operatore di accesso ai campi standard, $
per leggere i diversi campi che sono stati analizzati. Possiamo anche utilizzare le variabili per memorizzare i valori dei campi come segue.
first_name=$2
second_name=$3
Negli esempi precedenti, il valore di first_name
è impostato sul secondo campo e second_name
è impostato sul terzo campo.
A titolo illustrativo, considera un file denominato names.txt
che contiene un elenco degli utenti di un'applicazione indicando il loro nome e cognome più il sesso. Usando il comando cat, possiamo visualizzare il contenuto del file come segue:
cat names.txt
Quindi, possiamo anche utilizzare le variabili first_name
e second_name
per memorizzare il primo e il secondo nome del primo utente nell'elenco come eseguendo Awk comando qui sotto:
awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
Diamo anche un'occhiata a un altro caso, quando esegui il comando uname -a
sul tuo terminale, vengono stampate tutte le informazioni del tuo sistema.
Il secondo campo contiene il tuo hostname
, quindi possiamo memorizzare il hostname in una variabile chiamata hostname
e stamparlo utilizzando Awk come segue:
uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }'
2. Espressioni numeriche
In Awk, le espressioni numeriche vengono costruite utilizzando i seguenti operatori numerici:
*
: operatore di moltiplicazione+
: operatore di addizione/
: operatore di divisione-
: operatore di sottrazione%
: operatore modulo^
: operatore di esponenziazione
La sintassi per un'espressione numerica è:
operand1 operator operand2
Nella forma sopra, operando1
e operando2
possono essere numeri o nomi di variabili e operator
è uno qualsiasi degli operatori sopra.
Di seguito sono riportati alcuni esempi per dimostrare come creare espressioni numeriche:
counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1
Per comprendere l'uso delle espressioni numeriche in Awk, considereremo l'esempio seguente, con il file domains.txt
che contiene tutti i domini di proprietà di Tecmint.
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
Per visualizzare il contenuto del file, utilizzare il comando seguente:
cat domains.txt
Se vogliamo contare il numero di volte in cui il dominio linux-console.net
appare nel file, possiamo scrivere un semplice script per farlo come segue:
#!/bin/bash
for file in $@; do
if [ -f $file ] ; then
#print out filename
echo "File is: $file"
#print a number incrementally for every line containing linux-console.net
awk '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }' $file
else
#print error info incase input is not a file
echo "$file is not a file, please specify a file." >&2 && exit 1
fi
done
#terminate script with exit code 0 in case of successful execution
exit 0
Dopo aver creato lo script, averlo salvato e averlo reso eseguibile, quando lo eseguiamo con il file domains.txt
come input, otteniamo il seguente output:
./script.sh ~/domains.txt
Dall'output dello script, ci sono 6 righe nel file domains.txt
che contengono linux-console.net
, per confermare che puoi contarle manualmente.
3. Operatori di Assegnazione
L'ultima caratteristica di Awk che tratteremo sono gli operatori di assegnazione, ci sono diversi operatori di assegnazione in Awk e questi includono quanto segue:
*=
: operatore di assegnazione della moltiplicazione+=
: operatore di assegnazione di addizione/=
: operatore di assegnazione della divisione-=
: operatore di assegnazione di sottrazione%=
: operatore di assegnazione del modulo^=
: operatore di assegnazione dell'elevamento a potenza
La sintassi più semplice di un'operazione di assegnazione in Awk è la seguente:
variable_name=variable_name operator operand
Esempi:
counter=0
counter=counter+1
num=20
num=num-1
Puoi utilizzare gli operatori di assegnazione sopra per abbreviare le operazioni di assegnazione in Awk, considera gli esempi precedenti, potremmo eseguire l'assegnazione nel seguente formato:
variable_name operator=operand
counter=0
counter+=1
num=20
num-=1
Pertanto, possiamo modificare il comando Awk nello script di shell che abbiamo appena scritto sopra utilizzando l'operatore di assegnazione +=
come segue:
#!/bin/bash
for file in $@; do
if [ -f $file ] ; then
#print out filename
echo "File is: $file"
#print a number incrementally for every line containing linux-console.net
awk '/^linux-console.net/ { counter+=1 ; printf "%s\n", counter ; }' $file
else
#print error info incase input is not a file
echo "$file is not a file, please specify a file." >&2 && exit 1
fi
done
#terminate script with exit code 0 in case of successful execution
exit 0
In questo segmento della serie Awk, abbiamo trattato alcune potenti funzionalità di Awk, ovvero le variabili, la costruzione di espressioni numeriche e l'uso degli operatori di assegnazione, oltre ad alcune illustrazioni di come possiamo effettivamente utilizzarle.
Questi concetti non sono diversi da quelli di altri linguaggi di programmazione ma potrebbero esserci alcune distinzioni significative nella programmazione Awk.
Nella parte 9, esamineremo altre funzionalità di Awk ovvero modelli speciali: BEGIN
e END
. Fino ad allora, rimani connesso a Tecmint.