Calcolare la trasposta di una matrice

Archiviato in: calcolo — olaolaonline 6 giugno 2008 @ 11:51

Se abbiamo un file contenente dati in formati di matrice (numeri e stringhe)

1       2       3
4       5       6
7       8       9

possiamo ottenere la matrice trasposta, cioe’ lo scambio delle righe con le colonne, attraverso la sequenza di comandi

cat nomefile | awk ‘{for(j=1;j<=NF;j++){arr[j]=arr[j]" "$j}} END {for(i=1;i<=NF;i++) print arr[i]}’ | sed ’s/^\ //’

Il risultato sara’

1       4       7
2       5       8
3       6       9

Credits to jaduks

Controllo remoto di applicazioni nella shell

Archiviato in: shell — olaolaonline 19 maggio 2008 @ 16:50

Quando lanciamo nel nostro terminale un programma che puo’ durare diverse ore, puo’ essere comodo potersi scollegare dal terminale stesso, oppure dall’intero sistema, in particolare se il pc che stiamo utilizzando non e’ il nostro personale. Oppure nel caso in cui stiamo lanciando un’applicazione su un pc remoto via collegamento ssh.

In questi casi ci viene in aiuto l’utili screen. Con questo piccolo programma e’ possibile aprire un terminale virtuale da cui scollegarci senza fermare le applicazioni lanciate per poi ricollegarci allo stesso terminale in un altro momento o da un altro pc.

Innanzi tutto lanciamo screen

screen

Dopo aver letto le eventuali note iniziali ed aver premuto invio, ci troveremo davanti l’ambiente screen, che ricalca in tutto e per tutto un normale terminale. Possiamo quindi lanciare la nostra applicazione nel modo consueto.

Per scollegarci dal terminale virtuale non dobbiamo far altro che digitare in sequenza i tasti Ctrl+a seguito da d. Saremo cosi’ tornati al nostro consueto terminale.

Per ripristinare invece una sessione screen precedentemente abbandonata, basta usare il comando

screen -r

Se avevamo messo in sospeso piu’ d una sessione screen, il programma ci chiedera’ quale ripristinare, proponendoci una lista. Bastera’ ripetere quindi lo stesso comando indicando anche l’ID della sessione da ripristinare.

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’

seq start step stop

Ad esempio, il comando

seq 1 1 4

genera la seguente lista verticale

1
2
3
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

echo {1..13}

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.

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.

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.

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’

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

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.

<<< Previous Page - Next Page >>>