Questo articolo fa parte della serie Awk Tutorial Examples in corso. Nei nostri precedenti articoli su awk, abbiamo discusso di awk print, variabili definite dall'utente awk e variabili integrate awk.
Come qualsiasi altro linguaggio di programmazione, anche Awk ha molti operatori per operazioni su numeri e stringhe. In questo articolo discutiamo di tutti gli operatori awk chiave .
Ci sono due tipi di operatori in Awk.
- Operatore unario:l'operatore che accetta un singolo operando è chiamato operatore unario.
- Operatore binario – L'operatore che accetta più di un operando è chiamato operatore binario.
Operatore unario Awk
Operatore | Descrizione |
+ | Positiva il numero |
– | Annulla il numero |
++ | Incremento automatico |
— | Decremento automatico |
Operatore binario Awk
Ci sono diversi tipi di operatori binari disponibili in Awk. È stato classificato in base al suo utilizzo.
Operatori aritmetici Awk
I seguenti operatori vengono utilizzati per eseguire calcoli aritmetici.
Operatore | Descrizione |
+ | Aggiunta |
– | Sottrazione |
* | Moltiplicazione |
/ | Divisione |
% | Divisione Modulo |
Operatore di stringa Awk
Per la concatenazione di stringhe Awk ha i seguenti operatori.
Operatore | Descrizione |
(spazio) | Concatenazione di stringhe |
Operatori di assegnazione Awk
Awk ha Operatore di assegnazione e Operatore di assegnazione di scorciatoia come elencato di seguito.
Operatore | Descrizione |
= | Incarico |
+= | Assegnazione addizione scorciatoia |
-= | Assegnazione sottrazione scorciatoia |
*= | Assegnazione della moltiplicazione delle scorciatoie |
/= | Scorciatoia per l'assegnazione della divisione |
%= | Scorciatoia per l'assegnazione della divisione modulo |
Operatori condizionali Awk
Awk ha il seguente elenco di operatori condizionali che possono essere utilizzati con strutture di controllo e istruzioni di loop che saranno trattate nel prossimo articolo.
Operatore | Descrizione |
> | È maggiore di |
>= | È maggiore o uguale a |
< | È inferiore a |
<= | È minore o uguale a |
<= | È minore o uguale a |
== | È uguale a |
!= | Non è uguale a |
&& | Entrambe le espressioni condizionali dovrebbero essere vere |
|| | Ogni espressione condizionale dovrebbe essere vera |
Operatore di espressioni regolari Awk
Operatore | Descrizione |
~ | Operatore di corrispondenza |
!~ | Operatore Nessuna corrispondenza |
Esempi di operatori Awk
Ora esaminiamo alcuni esempi che utilizzano gli operatori awk. Usiamo /etc/passwd come file di input in questi esempi.
$ cat /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Esempio 1:conta il numero totale di campi in un file.
Lo script awk sottostante, corrisponde a tutte le righe e continua ad aggiungere il numero di campi in ciascuna riga, utilizzando l'operatore di assegnazione dell'aggiunta di scorciatoia. Il numero di campi visti finora è contenuto in una variabile denominata 'totale'. Una volta elaborato l'input, viene eseguito il pattern speciale 'END {...}', che stampa il numero totale di campi.
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd 49
Esempio Awk 2:conta il numero di utenti che stanno usando /bin/sh shell
Nello script awk sottostante, corrisponde all'ultimo campo di tutte le righe contenenti il modello /bin/sh. L'espressione regolare deve essere chiusa tra //. Quindi tutto il frontslash(/) deve essere sottoposto a escape nell'espressione regolare. Quando una riga corrisponde alla variabile 'n' viene incrementata di uno. Stampato il valore della 'n' nella sezione END.
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd 2
Awk Esempio 3:trova i dettagli dell'utente che ha l'ID UTENTE più alto
Lo script awk sottostante tiene traccia del numero più grande nel campo nella variabile 'maxuid' e la riga corrispondente verrà memorizzata nella variabile 'maxline'. Dopo aver eseguito il loop su tutte le righe, le stampa.
$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd 112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Esempio 4:stampa le righe pari
Lo script awk sottostante, elabora ogni riga e controlla NR % 2 ==0 cioè se NR è multipli di 2. Esegue l'operazione di default che stampa l'intera riga.
$ awk 'NR % 2 == 0' /etc/passwd libuuid:x:100:101::/var/lib/libuuid:/bin/sh hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Esempio Awk 5.Stampa ogni riga che ha lo stesso ID UTENTE e ID GRUPPO
Lo script awk sottostante stampa la riga solo se $3(USER ID) e $4(GROUP ID) sono uguali. Controlla questa condizione per ogni riga di input, se corrisponde, stampa l'intera riga.
$awk -F ':' '$3==$4' passwd.txt gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Esempio Awk 6:stampa i dettagli dell'utente con ID UTENTE maggiore o uguale a 100 e che deve utilizzare /bin/sh
Nell'istruzione Awk sottostante, ci sono due espressioni condizionali una è User id($3) maggiore o uguale a 100 e il secondo è l'ultimo campo deve corrispondere a /bin/sh , '&&' deve essere stampato solo se entrambi i precedenti le condizioni sono vere.
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Esempio Awk 7:stampa i dettagli dell'utente che non ha i commenti nel file /etc/passwd
Lo script Awk sottostante, legge ogni riga e controlla che il quinto campo sia vuoto, se è vuoto, stampa la riga.
$awk -F ':' '$5 == "" ' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false saned:x:110:116::/home/saned:/bin/false
Lettura consigliata