Nella scrittura di procedure o script bash a volte si ha la necessita’ di generare liste di numeri.
Ci sono due modi semplici di compiere tale operazione.
Il primo fa’ uso del comando seq e la sua sintassi e’
Ad esempio, il comando
genera la seguente lista verticale
Il separatore tra due elementi puo’ essere modificato dal valore standard (\n) in uno qualsiasi, ad esempio uno spazio, tramite il flag “-s”, in modo di ottenere una lista orizzontale.
Il secondo sfrutta le proprieta’ stesse della shell e consiste nel comando
che generrera’ la lista orizzontale
-
1 2 3 4 5 6 7 8 9 10 11 12 13
Questo secondo metodo genera solo liste orizzontali, ma puo’ essere usato anche con le lettere minuscole e maiuscole.
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
ed il file cognomi.txt contiene
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.
Volete estrarre uno o piu’ campi da un file? Conosco due metodi per farlo, ma sicuramente ve ne saranno numerosi altri (potenza di linux :)).
Il primo fa uso del comando cut e va’ usato cosi’
.
Questo comando estrae il secondo campo da ogni riga del file indicato. L’opzione -d” “ indica a cut di usare lo spazio come delimitatore dei campi, secondo me piu’ utile, altrimenti viene usato il carattere tab. Il campo -f indica il numero o il range (es. 2-3) dei campi da estrarre.
Altrimenti si puo’ usare un micro script awk
-
awk ‘{print $2}’ nome_file
.
In questo caso non e’ possibile indicare un range di campi, ma solo una lista. Di contro, awk riconosce come delimitatore sia gli spazi che le tabulazioni.
Capita a volte di voler estrarre la n-esima riga da un file. Con il comando sed basta scrivere
per ottenere a schermo il contenuto della riga numero 5.
Se invece vogliamo estrarre piu’ righe continuative usiamo la sintassi
-
sed -n ‘5,8p;8q’ nomefile
per estrarre dalla riga 5 alla riga 8 comprese.
La sintassi e’ abbastanza criptica, ma basta sapere che viene detto a sed di iniziare alla riga 5 e stampare fino alla riga 8, poi di finire il processamento sempre alla riga 8.
Forse non vi capita spesso, ma puo’ essere utile poter rovesciare una stringa di testo, e cioe’
-
Sono una stringa –> agnirts anu onoS
Bene allora basta usare il comando rev:
-
echo "Sono una stringa" | rev
-
agnirts anu onoS
Se invece il testo e’ contenuto in un file scrivete
-
rev file_con_testo
-
.elif nu ni ottircs eritrevni ad otseT
-
.agir avoun anu ‘e ‘atseuQ
Buon lavoro 