GNU/Linux >> Linux Esercitazione >  >> Linux

7 potenti esempi di operatori Awk (operatori unario, binario, aritmetico, stringa, assegnazione, condizionale, Reg-Ex Awk)

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.

  1. Operatore unario:l'operatore che accetta un singolo operando è chiamato operatore unario.
  2. 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.


Linux
  1. Iniziare con awk, un potente strumento di analisi del testo

  2. Esercitazione sulla programmazione C Linux Parte 12 - Operatori di assegnazione ed espressioni condizionali

  3. -eq:operatore unario previsto?

  4. Tutorial Awk:Comprendi le variabili Awk con 3 esempi pratici

  5. 6 Esempi di espressioni condizionali Bash ( -e, -eq, -z, !=, [, [[ ..)

Comando AWK in Linux con esempi

Esercitazione sui comandi Awk Linux/UNIX con esempi

Comando awk di Linux con 10 esempi

Bash Beginner Series #5:Utilizzo di operatori aritmetici negli script Bash

Tutorial Regex per esempi di Linux (Sed e AWK).

Scripting della shell Linux:numero esadecimale in stringa binaria