Creare liste di numeri

Archiviato in: shell — olaolaonline 21 Marzo 2008 @ 18:29

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’

  1. seq start step stop

Ad esempio, il comando

  1. seq 1 1 4

genera la seguente lista verticale

  1. 1
  2. 2
  3. 3
  4. 4

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

  1. echo {1..13}

che generrera’ la lista orizzontale

  1. 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.

Affiancare due o piu’ file

Archiviato in: manipolazione file — olaolaonline 31 Gennaio 2008 @ 18:38

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.

  1. 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

  1. Mario
  2. Pinco
  3. Giulio

ed il file cognomi.txt contiene

  1. Rossi
  2. Pallino
  3. Cesare

il risultato sara’

  1. Mario Rossi
  2. Pinco Pallino
  3. Giulio Cesare

Nel caso i due file abbiamo lunghezza diversa il comando funziona ugualmente ma si dovra’ prestare attenzione al risultato ottenuto.

Estrarre un campo da un file

Archiviato in: shell — olaolaonline 5 Gennaio 2008 @ 20:37

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’

  1. cut -d" " -f2 nome_file

.
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

  1. 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.

Estrarre una o piu’ righe da un file

Archiviato in: shell — olaolaonline 14 Dicembre 2007 @ 12:53

Capita a volte di voler estrarre la n-esima riga da un file. Con il comando sed basta scrivere

  1. sed -n ‘5p;5q’ nomefile

per ottenere a schermo il contenuto della riga numero 5.

Se invece vogliamo estrarre piu’ righe continuative usiamo la sintassi

  1. 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.

Invertire una stringa di testo

Archiviato in: shell — olaolaonline 3 Dicembre 2007 @ 12:56

Forse non vi capita spesso, ma puo’ essere utile poter rovesciare una stringa di testo, e cioe’

  1. Sono una stringa –> agnirts anu onoS

Bene allora basta usare il comando rev:

  1. echo "Sono una stringa" | rev
  2. agnirts anu onoS

Se invece il testo e’ contenuto in un file scrivete

  1. rev file_con_testo
  2. .elif nu ni ottircs eritrevni ad otseT
  3. .agir avoun anu ‘e ‘atseuQ

Buon lavoro :)

Next Page >>>