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 😊