Newsgroup: it.comp.os.linux.iniziare
Titolo: [bash] formattare output

Ciao, sto scrivendo  un piccolo script per farmi  le stats settimanali
dei log del server news (leafnode).  Lo script e' praticamente a posto
ma  l'unica  cosa che  non  mi  piace  e', appunto,  la  formattazione
dell'output.
Lo  script restituisce  il nome  di ogni  NG da  me sottoscritto  e il
numero degli articoli scaricati, vi mostro una parte dell'output:
Parziale articoli scaricati per ogni gruppo:    #Articoli
        it.comp.os.linux.iniziare:      90
        it.comp.os.linux.software:      9
        it.comp.os.linux.sys:   49
Penso che avrete gia' capito  la mia domanda, vorrei incolonnare tutti
i numeri nella colonna #Articoli.
Vi  mostro come  mando in  output quello  che vedete  sopra (lasciando
perdere come faccio a calcolare il numero totale dei post):
echo -e "Parziale articoli scaricati per ogni gruppo:\t#Articoli\n"
### qui tutti i miei conti
echo -e "\t$j:\t$SUM"
quel $j e' il nome del NG e $SUM e' il numero totale degli articoli.
C'e'  un modo  per  fare quello  che  voglio? 
Al limite anche senza utilizzare la tabulazione, ma andando a scrivere
nella  n-esima colonna  anche  se non  sarebbe  comunque la  soluzione
migliore visto che avrei ad esempio:
          #Articoli
                  111
                  9
                  12
Mentre io vorrei:
          #Articoli
                111
                  9
                 12
TIA
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]

 
Prova a sostituire la parte che crea l'output con questa:
spazi = $[40 - ${#j} - ${#SUM}]
echo -en "\t$j:" && printf %$[$spazi]d $SUM && printf '\n'
Se funziona (non l'ho provata completamente...), puoi cambiare il 40 nel 
calcolo della variabile $spazi per modificare il punto in cui sono 
incolonnati i numeri.
Vedi un po' che succede :-)
Ciao, Paolo

                  12
Per questo, e altro, puoi usare printf(1). Il formato è quello del C,
quindi puoi leggere printf(3) per conoscere i vari modificatori.
E.g.
 
	printf "\t#Articoli\n\n";	\
	for NUM in "111 9 12"; do	\
		printf "\t%9d\n" $NUM;	\
	done
Stampa:
	#Articoli
 
	      111
	        9
	       12
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)                 [ 
http://www.emmanuelebassi.net
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 quindi puoi leggere printf(3) per conoscere i vari modificatori.
Perfetto, proprio quello che cercavo, grazie.


 echo -en "\t$j:" && printf %$[$spazi]d $SUM && printf '\n'
Grazie anche a te Paolo :-)


Il Wed, 18 Feb 2004 10:10:29 GMT, nel NG it.comp.os.linux.iniziare, 
OuZ cosi' parlo':
Per  onore  di  cronaca  ho  risolto utilizzando  degli  hint  sia  da
Emmanuele che da Kaosmos.
Il consiglio  di Emmanuele da solo  non era sufficiente  (se ho capito
bene)  visto  che  su  ogni  linea  mi trovo  sue  campi  a  lunghezza
variabile,  sia  il  nome  del   NG  che  il  numero  degli  articoli,
utilizzando la forma:
printf "\t$NG%9d" $NG $NUM
il numero non era allineato.
Ho risolto in questo modo:
spazi=$[49-${#j}]
printf "\t%s%$[$spazi]d\n" $j $SUM
Non sono sicuro che sia il  metodo giusto, visto che non ho compreso a
fondo il  significato di  %9, da quello  che ho  capito (ma il  man di
printf l'ho  solo sfogliato) significa  che il campo che  comprende la
stampa  del numero  $SUM non  deve  essere minore  di 9,  se no  viene
aggiunto  un  pad  per  allineare  la  fine  della  parola  alla  nona
posizione.
Non so se potevo prendere una strada diversa, ma dovrebbe funzionare.
Ciao e grazie ancora a entrambi :-)


 Non so se potevo prendere una strada diversa, ma dovrebbe funzionare.
Se funziona, è la strada giusta, no? ;-)
Ciao, Paolo

 Se funziona, è la strada giusta, no? ;-)
Si, per il mio caso probabilmente si' ;-)
