Ci sono molte utilità disponibili nei sistemi Linux e Unix che consentono di elaborare e filtrare file di testo. cut
è un'utilità della riga di comando che consente di tagliare parti di righe da file specificati o dati convogliati e stampare il risultato sull'output standard. Può essere utilizzato per tagliare parti di una linea in base a delimitatore, posizione di byte e carattere.
In questo articolo, ti mostreremo come utilizzare il cut
comando attraverso esempi pratici e spiegazioni dettagliate delle opzioni più comuni.
Come utilizzare il cut
Comando #
La sintassi per il cut
il comando è il seguente:
cut OPTION... [FILE]...
Le opzioni che dicono cut
se utilizzare un delimitatore, una posizione di byte o un carattere quando si ritagliano porzioni selezionate, le linee sono le seguenti:
-f
(--fields=LIST
) - Selezionare specificando un campo, un insieme di campi o un intervallo di campi. Questa è l'opzione più comunemente usata.-b
(--bytes=LIST
) - Seleziona specificando un byte, un insieme di byte o un intervallo di byte.-c
(--characters=LIST
) - Seleziona specificando un carattere, un insieme di caratteri o un intervallo di caratteri.
Puoi utilizzare una, e solo una delle opzioni sopra elencate.
Altre opzioni sono:
-d
(--delimiter
) - Specificare un delimitatore che verrà utilizzato al posto del delimitatore "TAB" predefinito.--complement
- Completa la selezione. Quando si utilizza questa opzionecut
visualizza tutti i byte, i caratteri oi campi tranne quelli selezionati.-s
(--only-delimited
) - Per impostazione predefinitacut
stampa le righe che non contengono alcun carattere delimitatore. Quando viene utilizzata questa opzione,cut
non stampa righe che non contengono delimitatori.--output-delimiter
- Il comportamento predefinito dicut
consiste nell'usare il delimitatore di input come delimitatore di output. Questa opzione ti consente di specificare una stringa delimitatrice di output diversa.
Il cut
il comando può accettare zero o più nomi FILE di input. Se nessun FILE
è specificato, o quando FILE
è -
, cut
leggerà dallo standard input.
Il LIST
argomento passato a -f
, -b
e -c
le opzioni possono essere un numero intero, più numeri interi separati da virgole, un intervallo di numeri interi o più intervalli di interi separati da virgole. Ciascun intervallo può essere uno dei seguenti:
N
l'ennesimo campo, byte o carattere, a partire da 1.N-
dall'ennesimo campo, byte o carattere, fino alla fine della riga.N-M
dall'ennesimo all'ennesimo campo, byte o carattere.-M
dal primo al ennesimo campo, byte o carattere.
Come tagliare per campo #
Per specificare i campi da tagliare invocare il comando con -f
opzione. Quando non specificato, il delimitatore predefinito è “TAB”.
Negli esempi seguenti, utilizzeremo il seguente file. I campi sono separati da schede.
test.txt245:789 4567 M:4540 Admin 01:10:1980
535:763 4987 M:3476 Sales 11:04:1978
Ad esempio, per visualizzare il 1° e il 3° campo dovresti usare:
cut test.txt -f 1,3
245:789 M:4540
535:763 M:3476
Oppure se vuoi visualizzare dal 1° al 4° campo:
cut test.txt -f -4
245:789 4567 M:4540 Admin
535:763 4987 M:3476 Sales
Come tagliare in base a un delimitatore #
Per tagliare in base a un delimitatore, invoca il comando con -d
opzione, seguita dal delimitatore che desideri utilizzare.
Ad esempio, per visualizzare il 1° e il 3° campo utilizzando “:” come delimitatore, digitare:
cut test.txt -d ':' -f 1,3
245:4540 Admin 01
535:3476 Sales 11
Puoi usare qualsiasi singolo carattere come delimitatore. Nell'esempio seguente, utilizziamo il carattere spazio come delimitatore e stampiamo il 2° campo:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum
Come completare la selezione #
Per completare l'elenco dei campi di selezione, utilizzare --complement
opzione. Questo stamperà solo quei campi che non sono selezionati con il -f
opzione.
Il comando seguente stamperà tutti i campi tranne il 1° e il 3°:
cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980
4987 Sales 11:04:1978
Come specificare un delimitatore di output #
Per specificare il delimitatore di output, usa il --output-delimiter
opzione. Ad esempio, per impostare il delimitatore di output su _
useresti:
cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540
535:763_M:3476
Come tagliare per byte e caratteri #
Prima di andare oltre, facciamo una distinzione tra byte e caratteri.
Un byte è 8 bit e può rappresentare 256 valori diversi. Quando è stato stabilito lo standard ASCII, ha preso in considerazione tutte le lettere, i numeri e i simboli necessari per lavorare con l'inglese. La tabella dei caratteri ASCII ha 128 caratteri e ogni carattere è rappresentato da un byte. Quando i computer hanno iniziato a diventare accessibili a livello globale, le aziende tecnologiche hanno iniziato a introdurre nuove codifiche di caratteri per lingue diverse. Per le lingue che contengono più di 256 caratteri, non era possibile una semplice mappatura 1 a 1. Ciò porta a diversi problemi come la condivisione di documenti o la navigazione di siti Web ed era necessario un nuovo standard Unicode in grado di gestire la maggior parte dei sistemi di scrittura del mondo. UTF-8 è stato creato per risolvere questi problemi. In UTF-8, non tutti i caratteri sono rappresentati con 1 byte. I caratteri possono essere rappresentati da 1 byte a 4 byte.
Il -b
(--bytes
) l'opzione dice al comando di tagliare sezioni da ogni riga specificata da determinate posizioni di byte.
Negli esempi seguenti, stiamo usando ü
carattere che occupa 2 byte.
Seleziona il 5° byte:
echo 'drüberspringen' | cut -b 5
b
Seleziona il 5°, 9° e 13° byte:
echo 'drüberspringen' | cut -b 5,9,13
bpg
Seleziona l'intervallo dal 1° al 5° byte:
echo 'drüberspringen' | cut -b 1-5
drüb
Al momento della stesura di questo articolo, la versione di cut
in bundle in GNU coreutils non ha un'opzione per tagliare per caratteri. Quando si utilizza il -c
opzione, cut
si comporta come quando si usa -b
opzione.
Taglia esempi #
Il cut
comando viene solitamente utilizzato in combinazione con altri comandi tramite piping. Ecco alcuni esempi:
Ottieni un elenco di tutti gli utenti #
L'output della getent passwd
il comando viene passato a cut
, che stampa il 1° campo utilizzando :
come delimitatore.
getent passwd | cut -d ':' -f1
L'output mostra un elenco di tutti gli utenti del sistema.
Visualizza 10 comandi usati più frequentemente #
Nell'esempio seguente, cut
viene utilizzato per rimuovere i primi 8 byte da ciascuna riga della history
output del comando.
history | cut -c8- | sort | uniq -c | sort -rn | head
Conclusione #
cut
il comando viene utilizzato per visualizzare i campi selezionati da ciascuna riga di file dati o lo standard input.
Anche se molto utile, cut
ha alcune limitazioni. Non supporta la specifica di più di un carattere come delimitatore e non supporta più delimitatori.
Se hai domande o feedback, sentiti libero di lasciare un commento.