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
Sed e Awk 101 Hacks, di Ramesh Natarajan . Trascorro diverse ore al giorno in ambiente UNIX/Linux a occuparmi di file di testo (dati, configurazione e file di registro). Uso Sed e Awk per tutto il mio lavoro di manipolazione del testo. Sulla base della mia esperienza con Sed e Awk, ho scritto Sed and Awk 101 Hacks eBook che contiene 101 esempi pratici su varie funzionalità avanzate di Sed e Awk che miglioreranno la tua vita UNIX / Linux. Anche se usi Sed e Awk da diversi anni e non hai letto questo libro, per favore fatti un favore e leggi questo libro. Rimarrai stupito dalle capacità delle utility Sed e Awk.