Ricerca nel sito web

Lavora con variabili, espressioni e operatori Awk


La serie di comandi Awk sta diventando entusiasmante! Credo che, nelle sette parti precedenti, abbiamo esaminato alcuni fondamenti di Awk che è necessario padroneggiare per poter eseguire filtri di testo o stringhe di base in Linux.

A partire da questa parte, ci immergeremo nelle 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 significativamente diversi da quelli che potresti aver incontrato in precedenza in molti linguaggi di programmazione, come Shell, C, Python e molti altri. Quindi, non c’è bisogno di preoccuparsi molto di questo argomento; stiamo semplicemente rivedendo le idee comuni sull'utilizzo di queste funzionalità.

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 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 variabile.
  • 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, dove abbiamo trattato la modifica dei campi, abbiamo parlato di come Awk divide le righe di input in campi e utilizza un 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 di utenti che indicano 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 di comandi 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 caratteristiche di Awk che sono pattern speciali: BEGIN e END. Fino ad allora, rimani connesso a Tecmint.

Per coloro che cercano una risorsa completa, abbiamo raccolto tutti gli articoli della serie Awk in un libro, che include 13 capitoli e si estende su 41 pagine, coprendo sia l'utilizzo di base che avanzato di Awk con esempi pratici.

Product Name Price Buy
eBook: Introducing the Awk Getting Started Guide for Beginners $8.99 [Buy Now]

Articoli correlati: