Il comando cut in UNIX è un comando per ritagliare le sezioni da ogni riga di file e scrivere il risultato sullo standard output. Può essere utilizzato per tagliare parti di una riga in base alla posizione del byte, al carattere e al campo. Fondamentalmente il comando di taglio taglia una riga ed estrae il testo. È necessario specificare lopzione con il comando altrimenti dà errore. Se viene fornito più di un nome file, i dati di ciascun file non sono preceduti dal nome file.
Sintassi:
cut OPTION... ...
Consideriamo due file con nome state.txt e capital.txt contiene 5 nomi degli stati indiani e rispettivamente maiuscole.
$ cat state.txtAndhra PradeshArunachal PradeshAssamBiharChhattisgarh
Senza alcuna opzione specificata, viene visualizzato un errore.
$ cut state.txtcut: you must specify a list of bytes, characters, or fieldsTry "cut --help" for more information.
Opzioni e la loro descrizione con esempi:
1. -b (byte): per estrarre i byte specifici, è necessario seguire lopzione -b con lelenco dei numeri di byte separati da virgola. È inoltre possibile specificare un intervallo di byte utilizzando il trattino (-). È necessario specificare lelenco dei numeri di byte altrimenti dà errore. Tabulazioni e backspace sono trattati come un carattere di 1 byte.
Utilizza una forma speciale per selezionare i byte dallinizio alla fine della riga:
In this, 1- indicate from 1st byte to end byte of a line$ cut -b 1- state.txtAndhra PradeshArunachal PradeshAssamBiharChhattisgarhIn this, -3 indicate from 1st byte to 3rd byte of a line$ cut -b -3 state.txtAndAruAssBihChh
2. -c (colonna): per tagliare per carattere usa lopzione -c. Questo seleziona i caratteri dati allopzione -c. Può essere un elenco di numeri separati da virgola o un intervallo di numeri separati da trattino (-). Tabulazioni e backspace vengono trattati come un carattere. È necessario specificare lelenco dei numeri di caratteri altrimenti restituisce un errore con questa opzione.
Sintassi:
$cut -c filename
Qui, k denota il posizione iniziale del carattere e n denota la posizione finale del carattere in ogni riga, se k e n sono separati da “-” altrimenti sono solo la posizione del carattere in ogni riga dal file preso come input.
$ cut -c 2,5,7 state.txtnrrahsmirhti
Il comando sopra cut stampa il secondo, il quinto e il settimo carattere di ogni riga del file.
$ cut -c 1-7 state.txtAndhraArunachAssamBiharChhatti
Sopra il comando cut stampa i primi sette caratteri di ogni riga del file.
Cut utilizza una forma speciale per selezionare i caratteri dallinizio alla fine della riga:
$ cut -c 1- state.txtAndhra PradeshArunachal PradeshAssamBiharChhattisgarhAbove command prints starting from first character to end. Here in command only startingposition is specified and the ending position is omitted.$ cut -c -5 state.txtAndhrArunaAssamBiharChhatAbove command prints starting position to the fifth character. Here the starting positionis omitted and the ending position is specified.
3. -f (campo): lopzione -c è utile per le righe a lunghezza fissa. La maggior parte dei file unix non ha linee di lunghezza Per estrarre le informazioni utili è necessario tagliare per campi anziché per colonne Elenco dei campi numero speci fied deve essere separato da una virgola. Gli intervalli non sono descritti con lopzione -f. cut usa tab come delimitatore di campo predefinito ma può anche funzionare con altri delimitatori utilizzando lopzione -d.
Nota: lo spazio non è considerato come delimitatore in UNIX.
Sintassi:
$cut -d "delimiter" -f (field number) file.txt
Come nel file state.txt, i campi sono separati da spazio se lopzione -d non viene utilizzata, stampa lintera riga:
$ cut -f 1 state.txtAndhra PradeshArunachal PradeshAssamBiharChhattisgarh
Se viene utilizzata lopzione -d, viene considerato lo spazio come separatore o delimitatore di campo:
$ cut -d " " -f 1 state.txtAndhraArunachalAssamBiharChhattisgarh
Command prints field from first to fourth of each line from the file.Command:$ cut -d " " -f 1-4 state.txtOutput:Andhra PradeshArunachal PradeshAssamBiharChhattisgarh
4. –Complementazione: come suggerisce il nome, completa loutput. Questa opzione può essere utilizzata in combinazione con altre opzioni con -f o con -c.
5. –Output-delimiter: per impostazione predefinita, il delimitatore di output è lo stesso del delimitatore di input specificato nellopzione cut with -d. Per modificare il delimitatore di output, utilizzare lopzione –output-delimiter = “delimiter”.
$ cut -d " " -f 1,2 state.txt --output-delimiter="%"Andhra%PradeshArunachal%PradeshAssamBiharChhattisgarh
Qui il comando cut cambia il delimitatore (%) nello standard output tra campi specificati utilizzando lopzione -f.
6. –Version: questa opzione viene utilizzata per visualizzare la versione di cut attualmente in esecuzione sul sistema.
$ cut --versioncut (GNU coreutils) 8.26Packaged by Cygwin (8.26-2)Copyright (C) 2016 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later .This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Written by David M. Ihnat, David MacKenzie, and Jim Meyering.
Applicazioni del comando cut
1. Come usare tail with pipe (|): Il comando cut può essere reindirizzato con molti altri comandi di unix. Nel seguente esempio, loutput del comando cat viene fornito come input per il comando cut con lopzione -f per ordinare i nomi degli stati provenienti dal file state.txt in ordine inverso.
$ cat state.txt | cut -d " " -f 1 | sort -rChhattisgarhBiharAssamArunachalAndhra
Può anche essere reindirizzato con uno o più filtri per ulteriori elaborazioni. Come nellesempio seguente, stiamo usando i comandi cat, head e cut e il cui output è memorizzato nel nome file list.txt utilizzando la direttiva (>).
$ cat state.txt | head -n 3 | cut -d " " -f 1 > list.txt$ cat list.txtAndhraArunachalAssam
Grazie Saloni Gupta per aver fornito altri esempi.