[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RiminiLUG-General] esercizio per approfondire la shell - 20110504



Ciao,

> On 04/05/2011 10:55, Paolo Sala wrote:
> > Giovanni Pasini scrisse in data 04/05/2011 10:30:
> >> La mia domanda è, si può fare a meno di modificare IFS qui? Io
> >> credo di no, ma le soluzioni sono sempre varie con la bash...! e
> >> mi piacerebbe sapere se ne avete di diverse.
> >>
> > Non so se vale ma potresti usare sed:
> > $ cat foo_loc.txt | sed 's/.*/&  è una località stupenda/'

ottimo, ma vedi sotto

> > Piviul


Il giorno Wed, 04 May 2011 11:17:42 +0200
Ivan tarozzi <ivan@xxxxxxxxxxxx> ha scritto:

> Oppure awk:
> 
> $ awk {'print $0 " è una località stupenda"}' foo_loc.txt
> 
> oppure
> 
> $ cat foo_loc.txt | awk {'print $0 " è una località stupenda"}'
> 
> Non che sia meglio di sed, è che sono molto pigro e la sintassi di
> sed l'ho sempre digerita male... ma è *solo* un *mio* problema :)
> 
> e inoltre posos fare:
> cat foo_loc.txt| awk {'if ( $0 != "Rimini") print $0 " è una località 
> stupenda"; else print $0 " non è proprio un gran che"}'

anche awk è formidabile e in molti casi indispensabile direi.

> In ogni caso anche questa è una non risposta, in quanto non si usa la 
> shell ma un altro programma. 

infatti: se ho bisogno di usare la variabile in una *serie di comandi*
a catena all'interno del ciclo for come nell'esempio di seguito, usando
sed e/o awk la cosa sarebbe fattibile credo, ma il codice sicuramente
un pò meno chiaro/leggibile, a mio parere.
Quindi preferisco la formula con modifica di IFS.
 
NOTA: nell'esempio si fa riferimento a comandi del programma GRASS
[1], per essere eseguiti si deve essere dentro la sua particolare riga
di comando, ma la cosa può valere per comandi diversi da questi, (per
pigrizia non sono stato ad inventare un esempio diverso, questo l'ho
usato a suo tempo appunto in grass all'interno di uno script).

#!/bin/bash
export IFS=$'\n'
for nome in $(cat lista_aree.txt)
do
echo -----------------------------------------------
echo -----------------------------------------------
echo analisi dell'area $nome
echo -----------------------------------------------
echo -----------------------------------------------
g.region -p region=$nome n=n+500 s=s-500 w=w-500 e=e+500
v.surf.rst input=sic_rep_200_XYZ_id_cella_01_forestali elev=$nome'_r5' tension=40 smooth=0.1 zcol=Z
r.colors map=$nome'_r5' rast=mod2_rst_10_t40_s01_10
r.out.tiff -t in=$nome'_r5' out=$nome'_r5'
done

> Però questo dimostra come uno stesso 
> problema lo si possa risolvere in tanti modi e come la shell non sia 
> sempre quello più opportuno e semplice :)

già

> Ivan

Ciao,
Giovanni

[1] http://grass.fbk.eu/intro/general.php