[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 80.   Gestione dei file di testo

Un file di testo è quello che può essere letto così com'è senza bisogno di interpretazioni particolari. Il modo con cui questo file viene definito chiarisce anche il tipo di contenuto che questo può avere: testo puro, senza altre informazioni.

I file di testo sono una sequenza di caratteri e simboli, separata convenzionalmente in righe di lunghezze diseguali, che così devono essere terminate attraverso un codice particolare: quello che qui viene definito codice di interruzione di riga.

La tabella 80.1 elenca i programmi a cui si accenna in questo capitolo.

Tabella 80.1. Riepilogo dei programmi per la gestione dei file di testo.

Programma Descrizione
cat Emette il contenuto di uno o più file.
tac Emette il contenuto dei file invertendo l'ordine delle righe.
nl Emette il contenuto dei file numerando le righe.
od Converte in ottale.
rev Emette il contenuto dei file invertendo i caratteri di ogni riga.
fmt Riformatta il testo.
pr Rimpagina il testo per la stampa.
fold Formatta il testo «piegando» le righe molto lunghe.
column Incolonna.
colrm Elimina un intervallo di colonne (in caratteri) dal testo.
col Filtra alcuni tipi di codici per facilitare la stampa.
colcrt Filtra alcuni tipi di codici per facilitare la visualizzazione su terminale.
head Estrae la parte iniziale.
tail Estrae la parte finale.
split Suddivide.
csplit Suddivide in base a un modello.
wc Conta le parole.
sort Riordina le righe.
unique Filtra le righe doppie.
comm Confronta due file ordinati.
look Esegue una ricerca binaria all'interno di un file ordinato.
cut Estrae una porzione del contenuto delle righe.
paste Unisce le righe di due file in modo sequenziale.
join Unisce le righe di due file in base a delle chiavi di ordinamento.

80.1   Codice di interruzione di riga

Questo codice di interruzione di riga cambia a seconda del sistema operativo. Negli ambienti Unix si usa il codice 0A16 che viene chiamato <LF>, mentre negli ambienti Dos e derivati si utilizza la sequenza 0D0A16 corrispondente a <CR><LF>.

Quando si vuole fare riferimento al codice di interruzione di riga in modo astratto, cioè senza restare legati a un'architettura particolare del sistema operativo, si parla spesso di newline. La convenzione per cui il termine newline dovrebbe rappresentare idealmente ciò che si utilizza per interrompere una riga, non viene rispettata sempre. Generalmente, chi lavora con i sistemi Unix ignora il problema e utilizza il termine newline per identificare il carattere <LF>, che invece ha un nome preciso: line feed.

Utilizzando un sistema GNU, il problema derivato da questa ambiguità non si manifesta; tuttavia, leggendo i documenti che utilizzano questa espressione, occorre fare attenzione, o almeno è il caso di porsi il dubbio sul significato di ciò che si intende. Pertanto, in questo documento si utilizza la definizione «codice di interruzione di riga», in modo da non lasciare dubbi.

80.2   Spazi

Nei file di testo, gli spazi sono un concetto prettamente visivo: quando si visualizza (o si stampa) un file si notano delle zone in cui non appaiono caratteri di alcun tipo.

I caratteri attraverso i quali si ottengono questi spazi sono normalmente: lo spazio vero e proprio (3016), la tabulazione (0916) e il codice di interruzione di riga.

Il valore che possono avere gli spazi dipende dal contesto. Ciò che conta è sapere distinguere tra spazio in senso generale e carattere spazio che è invece un codice particolare.

A volte si utilizza il termine blank, o spazio lineare, per indicare uno spazio in senso generale, dove di norma si intende fare riferimento indifferentemente a un numero imprecisato di caratteri spazio o tabulazione.

Il codice di interruzione di riga entra in gioco quando si ha a che fare con righe vuote. Una riga di questo tipo può contenere spazi di vario genere (spazio e tabulazione) e poi deve essere conclusa da questo codice. Ma una riga vuota, blank line, può essere veramente vuota e contenere soltanto il codice di interruzione di riga.

80.3   Programmi di servizio per i file di testo

I programmi descritti nelle sezioni seguenti che sono di origine GNU (si riconoscono facilmente perché permettono di utilizzare opzioni descrittive e non solo quelle composte da una sola lettera), accettano le opzioni seguenti.

--help

Emette un breve riassunto della sintassi e delle opzioni disponibili.

--version

Emette il numero della versione.

-

Un trattino isolato indica esplicitamente di utilizzare quanto proveniente dallo standard input


Generalmente, se ciò può avere senso, quando non viene fornito alcun file negli argomenti, si intende utilizzare lo standard input.

80.4   Riemissione completa

Alcuni programmi per l'elaborazione di file di testo emettono lo stesso file fornito come input, eventualmente dopo un qualche tipo di elaborazione elementare.

Il più semplice di questi programmi è cat che nella maggior parte dei casi viene utilizzato senza opzioni, per lo più con lo scopo di iniziare una pipeline.

80.4.1   $ cat

cat [opzioni] [file...]

cat (1) emette di seguito i file indicati come argomento attraverso lo standard output, in pratica qualcosa di simile al comando TYPE del Dos.

Alcune opzioni

-b | --number-nonblank

Numera tutte le righe emesse, che non sono vuote, a partire da uno.

-s | --squeeze-blank

Sostituisce le righe vuote multiple con una sola riga bianca.

-v | --show-nonprinting

Sostituisce i caratteri non stampabili con una sigla che inizia con un accento circonflesso (^) o con la sigla M- a seconda che si tratti di un codice con il primo bit a zero oppure a uno (si intende il bit più significativo). Sono esclusi i caratteri di tabulazione e i codici di interruzione di riga.

-E | --show-ends

Visualizza la fine di ogni riga aggiungendo il simbolo $.

-T | --show-tabs

Mostra esplicitamente il carattere di tabulazione (<HT>) utilizzando il simbolo ^I.

-A | --show-all

Mostra tutti i simboli non stampabili. È equivalente a -vET.

80.4.2   $ tac

tac [opzioni] [file...]

tac (2) emette attraverso lo standard output i file forniti come argomento, invertendo l'ordine delle righe. Queste righe possono essere divise in base a un codice di interruzione di riga diverso dal solito, specificandolo attraverso l'opzione -s. In pratica, tac è l'inverso di cat.

Alcune opzioni

-s separatore | --separator=separatore

Permette di definire il codice di interruzione di riga da prendere in considerazione.

80.4.3   $ nl

nl [opzioni] [file...]

nl (3) emette attraverso lo standard output il contenuto dei file forniti come argomento con l'aggiunta dei numeri di riga per alcune o tutte le righe dell'input. Il conteggio delle righe viene fatto unendo i file forniti come argomento, come se si trattasse di un file unico, azzerandolo ogni volta che viene riconosciuto l'inizio di una pagina logica. Sotto questo punto di vista, una pagina logica è composta da tre parti: testa, corpo e piede.

In condizioni normali, salvo altre indicazioni passate attraverso le opzioni, si individua la testa, il corpo e il piede, perché preceduti da una riga che contiene esattamente una stringa speciale:

Per mostrare semplicemente il funzionamento del programma, viene proposto un file di testo puro contenente esattamente le righe seguenti:

\:\:\:
intestazione 1
intestazione 2
intestazione 3
\:\:
corpo 1
corpo 2
corpo 3
corpo 4
corpo 5
\:
piede 1
piede 2
piede 3
\:\:\:
intestazione 4
intestazione 5
intestazione 6
\:\:
corpo 6
corpo 7
corpo 8
corpo 9
corpo 10
\:
piede 4
piede 5
piede 6

Supponendo che il file abbia il nome prova.txt, ecco cosa si ottiene con il comando seguente:

nl prova.txt[Invio]

       intestazione 1
       intestazione 2
       intestazione 3

     1  corpo 1
     2  corpo 2
     3  corpo 3
     4  corpo 4
     5  corpo 5

       piede 1
       piede 2
       piede 3

       intestazione 4
       intestazione 5
       intestazione 6

     1  corpo 6
     2  corpo 7
     3  corpo 8
     4  corpo 9
     5  corpo 10

       piede 4
       piede 5
       piede 6

Si osservi in particolare che la prima riga è vuota, perché prima era presente la stringa di riconoscimento dell'inizio della testa.

Vedere nl.info oppure nl(1).

80.4.4   $ od

od (4) converte i file forniti come input in ottale o in altri formati.

Vedere od.info oppure od(1).

80.4.5   $ rev

rev [file...]

Emette attraverso lo standard output il file fornito come argomento, invertendo l'ordine dei caratteri di ogni riga. (5)

80.5   Rimpaginazione

Alcuni programmi si occupano di modificare l'impaginazione del testo, cambiandone la larghezza o aggiungendo delle intestazioni.

80.5.1   $ fmt

fmt [opzioni] [file...]

Formatta il testo contenuto nei file forniti come argomento, eliminando e aggiungendo codici di interruzione di riga, in modo che il testo risulti al massimo di una data larghezza. (6) Il risultato viene emesso attraverso lo standard output. Se non si specifica l'ampiezza massima della riga, questa si intende essere di 75 caratteri.

A titolo di esempio, si suppone che il file prova.txt contenga esattamente il testo seguente:

bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla

bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla
bla bla bla bla

Con fmt si ottiene la rimpaginazione dei due blocchi:

fmt prova.txt[Invio]

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla

Vedere fmt.info oppure fmt(1).

Alcune opzioni

-w ampiezza | --width=ampiezza

Permette di specificare l'ampiezza massima del testo.

80.5.2   $ pr

pr [opzioni] [file...]

Emette attraverso lo standard output il contenuto dei file forniti come argomento, formattati opportunamente per la stampa. (7) Se non viene indicato diversamente attraverso le opzioni:

Nel caso si utilizzino più colonne:

Vedere pr.info oppure pr(1).

Alcune opzioni

+pagina_iniziale[:pagina_finale]

Seleziona l'intervallo di pagine indicato. Se manca la pagina finale, si intende che sia l'ultima.

-numero_colonne

Produce un risultato suddiviso nel numero di colonne indicato. L'ampiezza delle colonne viene calcolata automaticamente.

-c

Stampa i caratteri di controllo utilizzando la notazione: ^A, ^B,... I simboli comunque non stampabili vengono rappresentati in ottale: \ooo.

-d

Raddoppia la spaziatura tra le righe (spaziatura doppia).

-l lunghezza_pagina

Definisce la dimensione della pagina espressa in righe. Di solito la pagina è lunga 66 righe.

-o margine_sinistro

Definisce il margine sinistro espresso in caratteri.

80.5.3   $ fold

fold [opzioni] [file...]

Formatta il testo contenuto nei file forniti come argomento, suddividendo le righe troppo lunghe inserendo un codice di interruzione di riga al raggiungimento della colonna 80 (se non viene specificato diversamente attraverso le opzioni). Il conteggio viene fatto tenendo conto dei caratteri di tabulazione come se fossero espansi, dei codici di backspace (<BS>) che diminuiscono il conteggio e dei caratteri di ritorno a carrello (<CR>) che azzerano il conteggio. (8)

Alcune opzioni

-b | --bytes

Conta i caratteri <HT> (tabulazione), <BS> e <CR> come gli altri.

-s | --spaces

Cerca di interrompere le righe subito dopo uno spazio vuoto, in modo da evitare di spezzare delle parole.

-w larghezza | --width=larghezza

Definisce la larghezza massima della colonna di testo finale.

80.5.4   $ column

column [opzioni] [file...]

Incolonna. Trasforma l'input rappresentato dai file indicati come argomento in modo da ottenere più colonne. Il risultato viene emesso attraverso lo standard output. (9)

Alcune opzioni

-c colonne

Indica la dimensione orizzontale in caratteri dell'output che si vuole ottenere.

-x

Di norma, ogni colonna viene riempita completamente prima di passare alla successiva. Con questa opzione, i dati all'interno delle colonne vengono disposti in sequenza orizzontale.

80.5.5   $ colrm

colrm [colonna_iniziale] [colonna_finale]

Elimina un intervallo di colonne da un file di testo. Le colonne sono espresse in caratteri. L'input è ottenuto dallo standard input e l'output viene emesso attraverso lo standard output. Se vengono omessi gli attributi, non viene eliminato alcunché. Se manca l'indicazione della colonna finale, l'eliminazione avviene a partire dalla colonna iniziale indicata fino alla fine della riga. (10)

Esempi

colrm 1 10 < documento.txt > tagliato.txt

Vengono eliminati i primi 10 caratteri di ogni riga del file documento.txt e il risultato viene emesso in tagliato.txt.

colrm 81 < documento > normale.txt

Le righe che superano gli 80 caratteri vengono tagliate.

80.6   Formattazione

Un tipo di file di testo è quello che contiene codici speciali di spostamento allo scopo di ottenere un aspetto particolare quando questo viene stampato. Il codice più usato in questo senso è <BS> (backspace) che normalmente viene interpretato come arretramento di una posizione. Gli effetti che si possono ottenere in questo modo sono il sottolineato e il neretto. Per esempio, per ottenere la parola «CIAO» in neretto, si utilizza una sequenza del tipo:

C<BS>CI<BS>IA<BS>AO<BS>O.

80.6.1   $ col

col [opzioni]

Alcuni tipi di file di testo possono contenere codici di spostamento in avanti o indietro. Alcuni di questi codici possono risultare inadatti alle unità per la visualizzazione o per la stampa, oppure possono essere disposti in modo disordinato.

col (11) emette attraverso lo standard output una trasformazione dello standard input, in modo che questo contenga solo codici per l'avanzamento di riga in avanti.

Alcune opzioni

-b

Vengono eliminati anche i caratteri di backspace (<BS>).

-f

I caratteri di mezzo line feed (avanzamento di mezza riga) vengono permessi e quindi non sono eliminati.

-x

I caratteri di tabulazione vengono sostituiti con spazi.

Esempi

man 1 ls | col -bx > /tmp/ls1.txt

Trasforma il risultato di ls(1) in un file di testo normale, che viene memorizzato in /tmp/ls1.txt.

80.6.2   $ colcrt

colcrt [opzioni] [file...]

Emette attraverso lo standard output una trasformazione dei file indicati come argomento, in modo da permettere la visualizzazione o la stampa di testi contenenti codici di spostamento di mezza riga. In pratica, i caratteri che dovrebbero apparire stampati in una mezza riga successiva, vengono spostati nella riga (intera) successiva. Il suo funzionamento è simile a quello del programma col, ma è orientato particolarmente all'emissione di un output adatto allo schermo di un terminale. (12)

Alcune opzioni

-

Vengono eliminate tutte le sottolineature.

-2

Stampa tutte le mezze righe, raddoppiando in pratica l'output.

80.7   Estrazione parziale e statistiche

Alcuni programmi si occupano di estrarre dall'input solo alcune porzioni, o solo delle informazioni riepilogative, o ancora di suddividere l'input in parti più piccole. In particolare, head, tail e split, condividono un'opzione che permette di definire una dimensione in byte, che può fare uso di un moltiplicatore, in base a quanto indicato dalla tabella 80.2.

Tabella 80.2. Moltiplicatori utilizzati da head, tail e split.

Moltiplicatore Significato
b Blocchi di 512 byte.
k Blocchi di 1 Kibyte.
m Blocchi di 1 Mibyte.

80.7.1   $ head

head [opzioni] [file...]

Emette attraverso lo standard output la prima parte (le prime 10 righe se non viene specificato diversamente con le opzioni) dei file forniti come argomento. (13)

Alcune opzioni

-b dimensione | --bytes=dimensione

Emette la quantità di byte indicata dalla dimensione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore, secondo quanto mostrato nella tabella 80.2.

-n dimensione | --lines=dimensione

Emette la quantità di righe indicata dalla dimensione.

80.7.2   $ tail

tail [opzioni] [file...]

Emette attraverso lo standard output la parte finale (le ultime 10 righe se non viene specificato diversamente con le opzioni) dei file forniti come argomento. (14)

Alcune opzioni

-b dimensione | --bytes=dimensione

Emette la quantità di byte indicata dalla dimensione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore, secondo quanto mostrato nella tabella 80.2.

-n dimensione | --lines=dimensione

Emette la quantità di righe indicata dalla dimensione.

-f | --follow

Cerca di continuare la lettura del file, assumendo che questo debba allungarsi per opera di un altro processo (come avviene nel caso dei file delle registrazioni).

Esempi

tail -f /var/log/messages > /dev/tty10 &

Legge la parte finale del file /var/log/messages e continua a farlo in attesa di aggiunte al file, inviando quanto ottenuto al dispositivo /dev/tty10. Il processo viene messo opportunamente sullo sfondo in modo da liberare il terminale.

80.7.3   $ split

split [opzioni] [file [prefisso]]

split (15) suddivide il contenuto del file fornito come argomento in porzioni ordinate, di una lunghezza massima definita (di solito 1 000 righe). I file che vengono generati hanno il prefisso indicato nell'argomento (oppure x se non viene specificato), seguito da una coppia di lettere che cambiano secondo una sequenza ordinata: aa, ab, ac,... Pertanto, i nomi ottenuti possono essere ordinati nello stesso modo con cui il file originale è stato suddiviso.

Alcune opzioni

-l righe | --lines=righe

Definisce il numero di righe dei file di destinazione.

-b dimensione | --bytes=dimensione

Definisce la dimensione in byte dei file di destinazione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore, secondo quanto mostrato nella tabella 80.2.

-C dimensione | --line-bytes=dimensione

Definisce la dimensione massima in byte dei file di destinazione, intendendo però che questi file contengano righe intere. Si possono usare gli stessi moltiplicatori utilizzabili nell'opzione -b.

80.7.4   $ csplit

csplit [opzioni] file modello...

Il programma di servizio csplit (16) serve a suddividere un file in più parti, secondo uno o più modelli. Ogni modello indicato alla fine della riga di comando, specifica l'inizio di una nuova porzione di file che si vuole ottenere. Il modello in questione può essere rappresentato da un numero, che esprime la quantità di righe da contare, per determinare l'inizio della porzione successiva, oppure da un'espressione regolare, che, a seconda della delimitazione, può anche servire a eliminare una porzione di file.

Salvo indicazione diversa, csplit genera una serie di file secondo il modello xxnn; in pratica, si tratta di una serie di file il cui nome inizia con due «x» e termina con un numero di due cifre. In particolare, con l'opzione -f è possibile stabilire un prefisso diverso da queste due «x».

Come accennato, ogni modello può essere rappresentato da un numero, o da un'espressione regolare, ma in più, può essere aggiunto un simbolo speciale che ne rappresenta la ripetizione, per permettere l'indicazione dello stesso modello per più porzioni del file:

modello [{n_ripetizioni|*}]

Come si vede dallo schema sintattico, l'indicazione eventuale delle ripetizioni è racchiuso tra parentesi graffe, che quindi fanno parte del comando. Quando si vogliono indicare tali parentesi graffe, è probabile che si debbano proteggere dall'interpretazione della shell. Vengono descritte di seguito le varie forme dei modelli che possono essere indicati, assieme a una spiegazione sull'uso del simbolo di ripetizione.

Tenendo conto che dovrebbe trattarsi di un programma di servizio GNU, le espressioni regolari vanno espresse secondo le convenzioni GNU. Per la precisione, vengono utilizzate le espressioni regolari estese (ERE). A questo proposito è conveniente leggere i capitoli 316 e 317.

Alcune opzioni

-f prefisso_nomi_file

--prefix=prefisso_nomi_file

Questa opzione permette di specificare l'inizio dei nomi dei file che vengono generati. Senza usare questa opzione, i file iniziano per xx*.

-n n_cifre_numeriche

--digits=n_cifre_numeriche

In condizioni normali, il nome dei file che vengono generati, termina con due sole cifre numeriche, cosa che consente la creazione di 100 file differenti (da 00 a 99). Con questa opzione è possibile modificare il numero di cifre numeriche di questi file.

-s | -q | --silent | --quiet

Se non viene usata questa opzione, csplit emette attraverso lo standard output una serie di numeri, corrispondenti alla dimensione in byte dei file che vengono generati.

Esempi

csplit elenco 10

Legge il file elenco generando il file xx00 con le prime 10 righe di questo, quindi il file xx01 con le righe restanti.

csplit elenco 10 \{0\}

Questo esempio serve a mostrare l'uso del simbolo di ripetizione: in questo caso, {0}, con le parentesi graffe debitamente protette, non ha effetto e il risultato è lo stesso dell'esempio precedente.

csplit elenco 10 \{1\}

Legge il file elenco generando il file xx00 con le prime 10 righe di questo, il file xx01 con le 10 righe successive e il file xx02 con le righe restanti.

csplit -f prova elenco 10 \{1\}

Come nell'esempio precedente, con la differenza che i file generati iniziano per prova*.

csplit -f prova elenco '/Pagina [0-9]*/' \{\*\}

Suddivide il file prova, in modo che ogni porzione inizi con una riga corrispondente all'espressione regolare Pagina [0-9]*. La ricerca della corrispondenza dell'espressione regolare avviene per tutte le righe disponibili, in base alla presenza del simbolo di ripetizione indefinita: {*}. I file generati hanno tutti la radice prova.

80.7.5   $ wc

wc [opzioni] [file...]

Emette attraverso lo standard output la statistica sul conteggio dei codici di interruzione di riga (in pratica il numero delle righe), delle parole e dei byte. Se attraverso le opzioni vengono specificati uno o due tipi di conteggio, quelli che non sono indicati espressamente non vengono emessi. (17)

Alcune opzioni

-c | --bytes

Emette la dimensione in byte.

-w | --words

Emette il totale delle parole.

-l | --lines

Emette il numero di righe (precisamente il numero dei codici di interruzione di riga).

80.8   Ordinamento

Alcuni programmi si occupano di riordinare file o di utilizzare file ordinati. L'ordinamento, la fusione, l'eliminazione degli elementi doppi e la ricerca binaria, rientrano in questo concetto.

80.8.1   $ sort

sort [opzioni] [file...]

sort (18) permette di ordinare o fondere insieme (merge) il contenuto dei file. Sono disponibili tre modalità di funzionamento:

Il risultato dell'ordinamento o della fusione, viene emesso attraverso lo standard output se non si specifica diversamente attraverso le opzioni.

Vedere sort.info oppure sort(1).

Opzioni riferite alla modalità di funzionamento

-c

Controlla che i file indicati siano già ordinati; se non lo sono, viene emessa una segnalazione di errore e il programma termina restituendo il valore uno, corrispondente a Falso.

-m

Fonde insieme i file indicati che devono essere già stati ordinati in precedenza. Nel caso non lo siano, si può sempre usare la modalità di ordinamento normale. L'utilizzo di questa opzione fa risparmiare tempo quando la situazione lo consente.

Opzioni riferite al tipo di ordinamento

-b

Ignora gli spazi bianchi iniziali.

-d

Durante l'ordinamento ignora tutti i caratteri che non siano lettere, numeri e spazi.

-f

Non distingue tra maiuscole e minuscole.

-i

Ignora i caratteri speciali al di fuori dell'ASCII puro (da 3016 a 7E16 compresi).

-n

Esegue una comparazione, o un ordinamento, di tipo numerico, tenendo conto anche del segno meno e del punto decimale.

-r

Inverte l'ordine della comparazione o dell'ordinamento.

Altre opzioni

-o file_generato

Invece di utilizzare lo standard output per emettere il risultato dell'ordinamento o della fusione, utilizza il file indicato come argomento di questa opzione.

-t carattere_separatore

Permette di definire il carattere usato come separatore tra i campi che compongono le varie righe (record).

-u

Il risultato dell'utilizzo di questa opzione dipende dalla modalità di funzionamento di sort. Se è attiva la modalità di ordinamento o di fusione, fa sì che, in caso di chiavi duplicate, venga emesso solo il primo di questi record. Se è attiva la modalità di controllo, fa sì che venga segnalato un errore in presenza di chiavi duplicate.

-k +posizione_iniziale [,posizione_finale]

Specifica la chiave di ordinamento o di fusione secondo una sintassi particolare (che qui non viene descritta).

Esempi

sort /etc/passwd

Riordina il file /etc/passwd a partire dalla prima colonna; in pratica, dal momento che si tratta del file che contiene le informazioni sulle utenze del sistema, lo riordina in base al nominativo di ognuna di queste (il primo campo).

sort -t : -k 1,1 /etc/passwd

L'effetto di questo comando è praticamente identico a quello precedente, con la differenza che viene dichiarato esplicitamente l'intervento nel primo campo del file (come è noto, il file /etc/passwd è diviso in campi separati dai due punti verticali).

sort -n -t : -k 3,3 /etc/passwd

Riordina il file già descritto, usando il terzo campo come chiave. In particolare, utilizza un ordinamento di tipo numerico, dal momento che il campo in questione rappresenta il numero UID di ogni utenza.

sort -m primo secondo > terzo

Fonde assieme i due file primo e secondo, già ordinati in precedenza, generando il file terzo.

sort -u -m primo secondo > terzo

Come nell'esempio precedente, ma in questo caso, il file che viene generato non contiene righe doppie.

80.8.2   $ uniq

uniq [opzioni] [file_in_ingresso [file_in_uscita]]

uniq (19) filtra il contenuto dei file ed emette solo le righe uniche. Il file fornito come input deve essere ordinato.

Vedere uniq.info oppure uniq(1).

80.8.3   $ comm

comm [opzioni] [file1] file2

Confronta due file ordinati ed emette attraverso lo standard output l'indicazione delle righe uniche nel primo e nel secondo file, oltre alle righe che i due file hanno in comune. Se non vengono specificate delle opzioni, viene emesso un risultato su tre colonne: la prima contiene le righe uniche del primo file, la seconda le righe uniche del secondo file, la terza le righe in comune. (20)

Alcune opzioni

-1

Sopprime la prima colonna.

-2

Sopprime la seconda colonna.

-3

Sopprime la terza colonna.

80.8.4   $ look

look [opzioni] stringa [file]

Esegue una ricerca binaria all'interno di un file ordinato a partire dalla prima colonna. Viene emessa la riga del file che inizia con la stringa indicata. (21)

Vedere look(1).

80.9   Campi

Alcuni programmi si occupano di elaborare porzioni di file a livello delle righe (o dei record).

Quando le righe di un file contengono informazioni strutturate in qualche modo, gli elementi di queste sono chiamati campi, inoltre, al posto del termine «riga» si preferisce utilizzare la parola record che esprime più precisamente il ruolo di questa: contenere una registrazione.

I campi di un record possono avere una dimensione fissa, oppure variabile. Nel primo caso anche i record hanno una dimensione fissa e la suddivisione in campi avviene in base alla posizione; nel secondo caso i record hanno una dimensione variabile e i campi vengono riconosciuti in base a un separatore che di solito deve essere definito.

80.9.1   $ cut

cut [opzioni] [file...]

Emette attraverso lo standard output porzioni del contenuto di ogni riga dei file indicati come argomento. Il modo con cui ciò avviene dipende dagli argomenti, attraverso i quali possono essere definite delle liste di valori o di intervalli. Il primo elemento corrisponde al numero uno. (22)

Alcune opzioni

-b lista_di_byte | --bytes=lista_di_byte

Definisce gli intervalli da estrarre espressi in byte.

-f lista_di_campi | --fields=lista_di_campi

Definisce gli intervalli da estrarre espressi in campi. I campi sono distinti in base a un certo carattere usato come delimitatore. Quello predefinito è il carattere di tabulazione.

-d delimitatore | --delimiter=delimitatore

Definisce un delimitatore alternativo al carattere di tabulazione.

Esempi

cut -b 1-10 pippo

Emette i primi 10 byte di ogni riga del file pippo.

cut -b 1-10,21 pippo

Emette per ogni riga del file pippo solo i primi 10 byte seguiti dal 21-esimo byte.

cut -d ":" -f 1,5 /etc/passwd

Emette il primo e il quinto campo del file /etc/passwd. Per leggere correttamente il file, viene anche definito il tipo di separatore (:). In pratica, viene visualizzato il nominativo e il nome completo degli utenti.

80.9.2   $ paste

paste [opzioni] [file...]

Emette attraverso lo standard output l'unione, riga per riga, dei file indicati come argomento. Le righe dei file vengono prese in ordine sequenziale e unite separandole con un carattere di tabulazione. Al termine delle nuove righe ottenute, viene aggiunto il codice di interruzione di riga. (23)

Alcune opzioni

-s | --serial

In questo caso viene utilizzato un solo file alla volta e tutte le sue righe vengono unite in un'unica riga.

-d elenco_delimitatori | --delimiters elenco_delimitatori

Viene utilizzato l'elenco di delimitatori fornito, invece di utilizzare la tabulazione per separare le righe riunite. Quando l'elenco di delimitatori viene esaurito, si ricomincia a usare il primo.

80.9.3   $ join

join [opzioni] file1 file2

join (24) genera un file contenente le righe che hanno chiavi identiche nei due file indicati tra gli argomenti. I due file devono essere già ordinati in base alle chiavi che si vogliono prendere in considerazione per la selezione.

Vedere join.info oppure join(1).

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) GNU text file processing utilities   GNU GPL

2) GNU text file processing utilities   GNU GPL

3) GNU text file processing utilities   GNU GPL

4) GNU text file processing utilities   GNU GPL

5) util-linux: rev   UCB BSD

6) GNU text file processing utilities   GNU GPL

7) GNU text file processing utilities   GNU GPL

8) GNU text file processing utilities   GNU GPL

9) column   UCB BSD

10) colrm   UCB BSD

11) col   UCB BSD

12) colcrt   UCB BSD

13) GNU text file processing utilities   GNU GPL

14) GNU text file processing utilities   GNU GPL

15) GNU text file processing utilities   GNU GPL

16) GNU text file processing utilities   GNU GPL

17) GNU text file processing utilities   GNU GPL

18) GNU text file processing utilities   GNU GPL

19) GNU text file processing utilities   GNU GPL

20) GNU text file processing utilities   GNU GPL

21) look   UCB BSD

22) GNU text file processing utilities   GNU GPL

23) GNU text file processing utilities   GNU GPL

24) GNU text file processing utilities   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome gestione_dei_file_di_testo.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]