Ricerca nel sito web

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:

  1. nome_variabile: è il nome che dai a una variabile
  2. value: 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:

  1. * : operatore di moltiplicazione
  2. + : operatore di addizione
  3. / : operatore di divisione
  4. - : operatore di sottrazione
  5. % : operatore modulo
  6. ^ : 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:

  1. *= : operatore di assegnazione della moltiplicazione
  2. += : operatore di assegnazione di addizione
  3. /= : operatore di assegnazione della divisione
  4. -= : operatore di assegnazione di sottrazione
  5. %= : operatore di assegnazione del modulo
  6. ^= : 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.