Awk è un linguaggio di scripting utilizzato per manipolare i dati e generare report.Il linguaggio di programmazione dei comandi awk non richiede alcuna compilazione e consente all’utente di utilizzare variabili, funzioni numeriche, funzioni stringa e operatori logici.
Awk è un’utilità che consente a un programmatore di scrivere programmi minuscoli ma efficaci sotto forma di istruzioni che definiscono schemi di testo che devono essere ricercati in ogni riga di un documento e l’azione che deve essere intrapresa quando viene trovata una corrispondenza all’interno di una riga., Awk è utilizzato principalmente per la scansione e l’elaborazione di pattern. Cerca uno o più file per vedere se contengono linee che corrispondono ai modelli specificati e quindi esegue le azioni associate.
Awk è abbreviato dai nomi degli sviluppatori-Aho, Weinberger e Kernighan.
COSA POSSIAMO FARE CON AWK ?
1. Operazioni AWK:
(a) Esegue la scansione di un file riga per riga
(b) Divide ogni riga di input in campi
(c) Confronta la riga/i campi di input con il pattern
(d) Esegue azioni su linee abbinate
2., Utile per:
(a) Trasformare i file di dati
(b) Produrre report formattati
3. Costrutti di programmazione:
a) il Formato di output linee
(b) operazioni Aritmetiche e di stringa
(c) istruzioni Condizionali e cicli
Sintassi:
awk options 'selection _criteria {action }' input-file > output-file
Opzioni:
-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument.-F fs : Use fs for the input field separator
Esempio di Comandi
Esempio:
si Consideri il seguente file di testo come file di input per tutti i casi di seguito.
$cat > employee.txt
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
1. Comportamento predefinito di Awk: Per impostazione predefinita Awk stampa ogni riga di dati dal file specificato.,
$ awk '{print}' employee.txt
Output:
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
Nell’esempio precedente, non viene fornito alcun modello. Quindi le azioni sono applicabili a tutte le linee. Action print without any argument stampa l’intera riga per impostazione predefinita, quindi stampa tutte le righe del file senza errori.
2. Stampa le linee che corrispondono al modello dato.
$ awk '/manager/ {print}' employee.txt
Output:
ajay manager account 45000varun manager sales 50000amit manager account 47000
Nell’esempio precedente, il comando awk stampa tutta la riga che corrisponde al ‘manager’.
3., Divisione di una riga in campi: Per ogni record, cioè riga, il comando awk divide il record delimitato da spazi bianchi per impostazione predefinita e lo memorizza nelle variabili n n. Se la riga ha 4 parole, verrà memorizzata rispettivamente in $1, respectively 2, respectively 3 e respectively 4. Inoltre, $0 rappresenta l’intera linea.
$ awk '{print $1,$4}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
Nell’esempio precedente, $1 e 4 4 rappresentano rispettivamente i campi Nome e Stipendio.,
Variabili incorporate in Awk
Le variabili incorporate di Awk includono le variabili di campo—$1, $2, $3, e così via (0 0 è l’intera riga) — che interrompono una riga di testo in singole parole o pezzi chiamati campi.
NR: comando NR mantiene un conteggio corrente del numero di record di input. Ricorda che i record sono di solito linee. Il comando Awk esegue le istruzioni pattern / action una volta per ogni record in un file.
NF: comando NF mantiene un conteggio del numero di campi all’interno del record di input corrente.,
FS: comando FS contiene il carattere separatore di campo che viene utilizzato per dividere i campi sulla linea di input. Il valore predefinito è “spazio bianco”, che significa spazio e caratteri di tabulazione. FS può essere riassegnato a un altro carattere (in genere in BEGIN) per modificare il separatore di campo.
RS: Il comando RS memorizza il carattere separatore del record corrente. Poiché, per impostazione predefinita, una riga di input è il record di input, il carattere separatore di record predefinito è una nuova riga.
OFS: il comando OFS memorizza il separatore di campo di output, che separa i campi quando Awk li stampa. Il valore predefinito è uno spazio vuoto., Ogni volta che print ha diversi parametri separati da virgole, stamperà il valore di OFS tra ciascun parametro.
ORS: il comando ORS memorizza il separatore del record di output, che separa le linee di output quando Awk le stampa. Il valore predefinito è un carattere di nuova riga. stampa emette automaticamente il contenuto di ORS alla fine di tutto ciò che è dato per la stampa.,
Esempi:
Uso di variabili NR incorporate (Numero di riga di visualizzazione)
$ awk '{print NR,$0}' employee.txt
Output:
1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000
Nell’esempio precedente, il comando awk con NR stampa tutte le righe insieme al numero di riga.
Uso di variabili NF incorporate (Visualizza l’ultimo campo)
$ awk '{print $1,$NF}' employee.txt
Output:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
Nell’esempio precedente $1 rappresenta il nome e Salary NF rappresenta lo stipendio. Possiamo ottenere lo stipendio usando N NF, dove represents NF rappresenta l’ultimo campo.,
un Altro uso di NR variabili interne (Linea di Display Da 3 a 6)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
Uscita:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
Esempi
Per il file di testo:
$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3
1) Per stampare il primo elemento con il numero di riga(NR) separati da ” – ” da ogni riga in geeksforgeeks.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2) Per restituire la seconda riga / elemento da geeksforgeeks.,est presente nel file:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) Per contare le righe di un file:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) linee di Stampa con più di 10 caratteri:
$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3
7) Per trovare check per ogni stringa in ogni colonna specifica:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) Per stampare le piazze dei primi numeri da 1 a n dire 6:
$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36
Questo articolo è un contributo di Anshika Goyal e Praveen Negi., Se ti piace GeeksforGeeks e vorrebbe contribuire, si può anche scrivere un articolo utilizzando contribute.geeksforgeeks.org o posta il tuo articolo a [email protected]. Vedere il tuo articolo che appare sulla pagina principale GeeksforGeeks e aiutare altri Geek.