Tips & Tricks del giorno.
A volte, potrebbe essere necessario conoscere il contenuto di una specifica riga oppure un intervallo di righe di un file testo senza doverlo aprire con un editor, soprattutto se l’operazione deve essere fatta in modo non interattivo; la soluzione di usare head e tail combinati si dimostra essere utile soprattutto nel caso in cui il file in questione sia di grandi dimensioni.
Preparare il file da utilizzare per le prove, contenente un numero arbitrario di righe (in questo caso 100).
root@kali:~# for i in $(seq 1 1 100); do echo "Line number $i" >> test.txt; done
Verificare il contenuto del file, appena creato.
root@kali:~# cat test.txt Line number 1 Line number 2 Line number 3 ..... Line number 98 Line number 99 Line number 100
Gestire lo stream di dati, partendo dall'alto
Per visualizzare una specifica riga (es. riga 15):
Attraverso la pipeline , si procedera’ a ridurre, sempre di più il numero di righe necessario, fino ad ottenere il risultato aspettato; Lo stream del file contenente 100 righe, generato dal comando cat, sara’ inviato, al comando head, che attraverso l’opzione -15, considerera’ solo le prime 15 righe; sara’, poi, inviato al comando tail, che attraverso l’opzione -1 considerera’ solo la prima riga, dal basso, l’ultima dello stream, di 15 righe, ricevuto da head, che sara’, quindi, inviata, in questo caso, alla console o terminale per essere visualizzato (Line number 15).
root@kali:~# cat test.txt | head -15 |tail -1 Line number 15
Per un range di righe specifico (es dalla riga 37 alla riga 39), digitare:
root@kali:~# cat test.txt | head -39 |tail -3 Line number 37 Line number 38 Line number 39
Gestire lo stream di dati, partendo dal basso
Questo metodo, è sicuramente controintuitivo, ma potrebbe rivelarsi essere utile nel caso il file contenesse molte righe (milioni) e l’informazione di cui avete bisogno, potrebbe risiedere verso il fondo, in pratica nella seconda metà del file per evitare di produrre uno stream da tutto il file inutilmente.
Il questo caso, abbiamo bisogno di avere una informazione aggiuntiva; contando dall’alto, la prima riga del file è la riga uno (1), per contare dal basso, occorre, quindi, conoscere il numero dell’ultima riga del file.
root@kali:~# cat test.txt |wc -l 100
Conoscendo, che il file è composto da 100 righe per estrarre la riga 90 digitare:
root@kali:~# cat test.txt |tail -11| head -1 Line number 90
Per un range di righe specifico (es dalla 75 alla 79) digitare:
root@kali:~# cat test.txt |tail -26| head -5 Line number 75 Line number 76 Line number 77 Line number 78 Line number 79
Considerazioni finali
In questo articolo abbiamo esplorato l’uso essenziale dei comandi Linux head e tail, svelandone le funzionalità, le applicazioni e le sinergie, nel conteggio delle righe di file di testo; vi invito ad approfondire questi comandi e a sperimentare gli esempi fin qui visti per sfruttare tutto il loro potenziale.