Puo’ capitare di voler numerare le righe di un file, come si faceva una volta nei listati dei codici di programmazione.
Il primo modo che mi viene in mente è quello di utilizzare un piccolo script awk
awk ‘{print NR, $0}’ nomefile
Ancora piu’ veloce pero’ e’ utilizzare il comando nl
nl nomefile
Se vogliamo numerare anche le righe vuote, come nel caso del awk, allora basta aggiungere l’opzione -ba.
Altro utilissimo comando!!!
Non vi capita tutti i giorni di dover invertire l’ordine delle righe di un file? Bene, se per visualizzare il contenuto di un file nella console usiamo il comando cat, per visualizzarne il contenuto ma in ordine inverso non dobbiamo far altro che usare il comando tac.
Quindi se il file contiene
cat nomefile
Prima riga
Seconda riga
3a riga
il risultato invertito sarà
tac nomefile
3a riga
Seconda riga
Prima riga
Semplice? Semplicissimo!
Forse non tutti sanno che i file di testo creati sotto DOS/Windows hanno come terminatore di riga l’accoppiata di caratteri speciali CR/LF (carriage return/line feed o anche \r\n).
Linux e piu’ in generale i sistemi Unix invece utilizzano in solo carattere LF. Per questo quando si copia un file di testo da una macchina Windows si hanno problemi di visualizzazione.
Per risolvere il problema basta applicare al file il comando dos2unix.
dos2unix nomefile
Tale comando in genere non e’ compreso nelle installazioni base ed e’ contenuto in pacchetti che hanno nome diverso nelle varie distribuzioni linux. Credo pero’ che non dovrebbe mancare nella nostra linux box.
Se stiamo lavorando su due o piu’ file contenenti, ad esempio, delle colonne di dati e volessimo creare un unico file con tutti i dati di origine ci basta utilizzare il comando paste.
paste -d" " file1 file2 file3…
In questo modo verra’ mostrato a schermo il contento, ma possiamo sempre reindirizzarlo su un altro file. L’opzione -d permette di specificare quale carattere utilizzare per delimitare i due file, in questo caso uno spazio.
Ad esempio se il file nomi.txt contiene
Mario
Pinco
Giulio
ed il file cognomi.txt contiene
Rossi
Pallino
Cesare
il risultato sara’
Mario Rossi
Pinco Pallino
Giulio Cesare
Nel caso i due file abbiamo lunghezza diversa il comando funziona ugualmente ma si dovra’ prestare attenzione al risultato ottenuto.