GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando AWK di Linux:esempi di sintassi di utilizzo di Linux e Unix

In questa guida per principianti imparerai le basi di awk comando. Vedrai anche alcuni dei modi in cui puoi usarlo quando hai a che fare con il testo.

Iniziamo!

Cos'è l'awk comando?

awk è un linguaggio di scripting ed è utile quando si lavora nella riga di comando. È anche un comando ampiamente utilizzato per l'elaborazione del testo.

Quando si utilizza awk , puoi selezionare i dati, una o più parti di testo individuali, in base a uno schema da te fornito.

Ad esempio, alcune delle operazioni che puoi eseguire con awk stanno cercando una parola o uno schema specifico in un pezzo di testo dato, o addirittura selezionano una determinata riga o una determinata colonna in un file che fornisci.

La sintassi di base di awk comando

Nella sua forma più semplice, il awk comando è seguito da una serie di virgolette singole e una serie di parentesi graffe, con il nome del file che si desidera cercare menzionato per ultimo.

Sembra qualcosa del genere:

awk '{action}' your_file_name.txt

Quando vuoi cercare del testo che ha uno schema specifico o stai cercando una parola specifica nel testo, il comando avrà un aspetto simile a questo:

awk '/regex pattern/{action}' your_file_name.txt

Come creare un file di esempio

Per creare un file nella riga di comando, usa il touch comando.
Ad esempio:touch filename.txt dove filename , è il nome del tuo file.

Puoi quindi utilizzare open comando (open filename.txt ), e si aprirà un programma di elaborazione testi come TextEdit in cui puoi aggiungere il contenuto del file.

Supponiamo quindi di avere un file di testo, information.txt , che contiene dati separati in colonne diverse.

Il contenuto del file potrebbe assomigliare a questo:

fristName       lastName        age     city       ID

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Wood            Tinker          54      Lisbon     N/A
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

Nel mio esempio, c'è una colonna per firstName , lastName , age , city e ID .

In qualsiasi momento, puoi visualizzare l'output del contenuto del tuo file digitando cat text_file , dove text_file è il nome del tuo file.

Come stampare tutto il contenuto del file usando awk

Per stampare tutto il contenuto di un file, l'azione che specifichi tra parentesi graffe è print $0 .

Funzionerà esattamente allo stesso modo del cat comando menzionato in precedenza.

awk '{print $0}' information.txt

Uscita:

fristName       lastName        age     city       ID

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Wood            Tinker          54      Lisbon     N/A
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

Se desideri che ogni riga abbia un conteggio del numero di riga, dovresti utilizzare il NR variabile incorporata:

awk '{print NR,$0}' information.txt 
1 fristName     lastName        age     city       ID
2 
3 Thomas        Shelby          30      Rio        400
4 Omega         Night           45      Ontario    600
5 Wood          Tinker          54      Lisbon     N/A
6 Giorgos       Georgiou        35      London     300
7 Timmy         Turner          32      Berlin     N/A

Come stampare colonne specifiche usando awk

Quando si utilizza awk , puoi specificare alcune colonne che vuoi stampare.

Per stampare la prima colonna, usa il comando:

awk '{print $1}' information.txt

Uscita:

Thomas
Omega
Wood
Giorgos
Timmy

Il $1 sta per il primo campo, in questo caso la prima colonna.

Per stampare la seconda colonna, dovresti usare $2 :

awk '{print $2}' information.txt

Uscita:

lastName

Shelby
Night
Tinker
Georgiou
Turner

Il modo awk determina dove ogni colonna inizia e finisce è con uno spazio, per impostazione predefinita.

Per stampare più di una colonna, ad esempio la prima e la quarta colonna, dovresti fare:

awk '{print $1, $4}' information.txt

Uscita:

fristName city
 
Thomas    Rio
Omega     Ontario
Wood      Lisbon
Giorgos   London
Timmy     Berlin

Il $1 rappresenta il primo campo di input (prima colonna) e il $4 rappresenta il quarto. Li separi con una virgola, $1,$4 , quindi l'output ha uno spazio ed è più leggibile.

Per stampare l'ultimo campo (l'ultima colonna), puoi anche usare $NF che rappresenta l'ultimo campo in un record:

awk '{print $NF}' information.txt 

Uscita:

ID

400
600
N/A
300
N/A

Come stampare righe specifiche di una colonna

Puoi anche specificare la riga che vuoi stampare dalla colonna scelta:

awk '{print $1}' information.txt | head -1 

Uscita:

FirstName

Analizziamo quel comando. awk '{print $1}' information.txt stampa la prima colonna. Quindi l'output di quel comando (che hai visto in precedenza) è convogliato , utilizzando il simbolo pipe | , al comando head, dove è -1 argomento seleziona la prima riga della colonna.

Se volessi stampare due righe, faresti:

awk '{print $1}' information.txt | head -2 

Uscita:

FirstName
Dionysia

Come stampare righe con uno schema specifico in awk

Puoi stampare una riga che inizia con una lettera specifica.

Ad esempio:

awk '/^O/' information.txt

Uscita:

Omega           Night           45      Ontario    600

Quel comando seleziona qualsiasi riga con testo che inizia con un O .

Utilizza il simbolo della freccia su (^ ) prima, che indica l'inizio di una riga, quindi la lettera con cui vuoi che inizi una riga.

Puoi anche stampare una riga che finisce in uno schema specifico:

awk '/0$/' information.txt 

Uscita:

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Giorgos         Georgiou        35      London     300

Questo stampa le righe che terminano con un 0 – il $ il simbolo viene utilizzato dopo un carattere per significare come finirà una riga.

Quel comando potrebbe anche essere cambiato in:

awk '! /0$/' information.txt 

Il ! è usato come NOT , quindi in questo caso seleziona le righe che NON terminano con un 0 .

fristName       lastName        age     city       ID

Wood            Tinker          54      Lisbon     N/A
Timmy           Turner          32      Berlin     N/A

Come usare le espressioni regolari in awk

Per emettere parole che contengono determinate lettere e stampare parole che corrispondono a uno schema da te specificato, usa di nuovo le barre, // , mostrato in precedenza.

Se vuoi cercare parole che contengono on , faresti:

awk ' /io/{print $0}' information.txt 

Uscita:

Thomas          Shelby          30      Rio        400
Omega           Night           45      Ontario    600
Giorgos         Georgiou        35      London     300

Questo corrisponde a tutte le voci che contengono io .

Supponi di avere una colonna in più:un department colonna:

fristName       lastName        age     city       ID   department

Thomas          Shelby          30      Rio        400  IT
Omega           Night           45      Ontario    600  Design
Wood            Tinker          54      Lisbon     N/A  IT
Giorgos         Georgiou        35      London     300  Data
Timmy           Turner          32      Berlin     N/A  Engineering

Per trovare tutte le informazioni sulle persone che lavorano in IT , dovresti specificare la stringa che stai cercando tra le barre, // :

awk '/IT/' information.txt 

Uscita:

Thomas          Shelby          30      Rio        400  IT
Wood            Tinker          54      Lisbon     N/A  IT

E se volessi vedere solo il nome e il cognome delle persone che lavorano in IT ?

Puoi specificare la colonna in questo modo:

awk '/IT/{print $1, $2}' information.txt 

Uscita:

Thomas Shelby
Wood   Tinker

Questo mostrerà solo la prima e la seconda colonna dove IT viene visualizzato, invece di presentare tutti i campi.

Quando cerchi parole con uno schema specifico, a volte potresti dover usare un carattere di escape, come questo:

awk '/N\/A$/' information.txt 

Uscita:

Wood            Tinker          54      Lisbon     N/A
Timmy           Turner          32      Berlin     N/A

Volevo trovare le righe che terminano con il modello N/A .

Quindi, durante la ricerca tra il ' // ' come mostrato finora, ho dovuto usare un carattere di escape (\ ) tra N/A , altrimenti avrei ricevuto un errore.

Come utilizzare gli operatori di confronto in awk

Se, ad esempio, volessi trovare tutte le informazioni sui dipendenti di età inferiore a 40 , useresti il ​​< operatore di confronto in questo modo:

awk '$3 <  40 { print $0 }' information.txt

Uscita:

Thomas          Shelby          30      Rio        400
Giorgos         Georgiou        35      London     300
Timmy           Turner          32      Berlin     N/A

L'output mostra solo le informazioni delle persone sotto i 40 anni.

Conclusione

E il gioco è fatto! Ora conosci le basi assolute per iniziare a lavorare con awk e manipolare i dati di testo.

Per saperne di più su Linux, freeCodeCamp ha a disposizione un'ampia varietà di materiali didattici.

Eccone un paio per iniziare:

  • Nozioni di base su Linux - Workshop pratico
  • Linux per hacker etici (esercitazione su Kali Linux)
  • Manuale dei comandi di Linux

Grazie per la lettura e buon apprendimento 😊


Linux
  1. Il comando Sed di Linux:utilizzo ed esempi

  2. Comandi Linux - Panoramica ed esempi

  3. Utilizzo del comando trova Linux:utilizzo con esempi

  4. 5 Esempi pratici del comando dd in Linux

  5. Esempi di comandi awk in Linux

Comando awk di Linux con 10 esempi

Opzioni di comando ed esempi di Tee Command in Linux

50 Comando Linux Cut semplice e utile in Unix con esempi

I 50 esempi pratici del comando SED in Linux

Esempi essenziali del comando ps in Linux

Comando AWK in Linux/Unix