Vediamo un esempio del comando tac (il contrario di cat) che concatena il suo input e lo visualizza in output al contrario. Questa sua particolare funzione ci viene utile per eliminare le ultime n-righe di un file in quanto vengono visualizzate da subito in output ottenendo un notevole risparmio di tempo rispetto a una lettura completa di tutto il file.

alex@goku:~$ cat pippo.txt
1
2
3
4
5
6
7

Se voglio cancellare le ultime n-righe uso il comando tail +(n+1) su un file visualizzato al contrario e poi ri-visualizzato nuovamente al contrario in modo da riportarlo nel suo stato iniziale. Ad esempio se voglio eliminare le ultime 3 righe:

alex@goku:~$ tac pippo.txt | tail +4 | tac
1
2
3
4

Purtroppo, in alcune versioni del comando tail, l’opzione tail +n non è implementata ma solo la classica tail -n. Si può simulare lo stesso comportamento calcolando il numero di righe totali e sottraendo il numero desiderato anche se il wc obbliga a leggere interamente il file.

alex@goku:~$ tac pippo.txt  | tail -$(($(wc -l pippo.txt | awk '{print $1}')-3)) | tac
1
2
3
4

Se addirittura siete su un sistema Unix in cui non è presente il comando tac, come ad esempio Sun Solaris, allora bisogna leggere tutto il file e togliere la parte iniziale tramite head (e se il file è di dimensioni elevate allora tale sistema impiegherà parecchio tempo).

ALL=$(wc -l elenco.txt | awk '{print $1}')
TOP=$(($LAST - 3))
head -$(echo $TOP) elenco.txt > elenco.txt.new
mv elenco.txt.new elenco.txt

E’ possibile comunque simulare il comando tac tramite il sed.

alex@goku:~$ sed -n '1!G;h;$p' pippo.txt
7
6
5
4
3
2
1

Infine, sempre con il sed, è possibile cancellare direttamente l’ultima riga di un file; se tale comando lo eseguiamo in un ciclo otteniamo la cancellazione delle ultime n-righe.

alex@goku:~$ sed '$d' pippo.txt

[ad name=”HTML”]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.