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.

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

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

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’

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 :)

Calcoli matematici complessi nella shell

Archiviato in: calcolo — olaolaonline 16 Novembre 2007 @ 18:21

Come noto la shell permette di effettuare solo operazioni matematiche basilari: la somma, la sottrazione, la moltiplicazione e la divisione. Quest’ultima peraltro restituira sempre la parte intera del risultato dell’operazione.
La sintassi da usare per fare i calcoli matematici e’

a=10
b=45
echo $(($a+37))
47
echo $(($a*$b))
450

Inoltre, se volete semplicemente incrementare una vriabile di una quantita’ fissa, esiste una sintassi simile al C

n=0
echo "n = $n"
n = 0
(( n += 1 ))
echo "n = $n"
n = 1

Ma se volessimo usare dei numeri con la virgola o fare dei calcoli piu’ complessi? In questo caso dovremmo fare uso dell’utility bc. In pratica basta passare a questa utility la stringa contenente l’operazione da effettuare

echo "2^8" | bc -l
256
echo "3.36*13.2" | bc -l
44.352
echo "c(0)" | bc -l
1.000

L’ultima operazione e’ il coseno di zero.
Non dimenticate l’opzione -l per attivare le librerie matematiche avanzate di bc.

Creare un file di log

Archiviato in: shell — olaolaonline 6 Novembre 2007 @ 19:52

Quando si scrive una procedura per la shell e’ sempre bene fare in modo che venga creato un file di log contente tutte le informazioni importanti e le operazioni effettuate dalla procedura stessa. Per fare cio’ basterebbe reindirizzare l’output dello schermo su un file con il consueto simbolo di maggiore (>). In questo modo pero’ non vediamo piu’ a schermo quello che sta’ succedendo. Inoltre sarebbe comodo avere nel file di log l’indicazione della data e dell’ora a cui e’ avvenuto un verto evento.

Bene, attraverso l’uso combinato dei comandi date e tee possiamo scrivere una semplice funzione che fa’ al caso nostro.

logging (){
  dateTime=$(date "+%Y-%m-%d %H:%M:%S")
  if [[ -n $2 ]]
  then
    echo "$dateTime $1" | tee -a $2
  else
    echo "$dateTime $1 (no log file specified)"
  fi
}

La funzione va usata in questo modo

logging "Testo da scrivere nel log" nome_file_log.

Il primo argomento e’ obbligatorio e rappresenta l’informazione che volete scrivere nel file di log. Il secondo argomento e’ il nome del file di log in cui volete scrivere. Se tale file non viene specificato il testo viene scritto solo a schermo.

Il risultato sara’ della forma

2007-11-06 18:35:14 Testo da scrivere nel log

Al prossimo trick!

<<< Previous Page - Next Page >>>