Newsgroup: it.comp.os.linux.iniziare
Titolo: Incolonnare/impaginare script

Ciao a tutti,
risucite ad aiutermi ad incolonnare meglio il risultato di questo script?
 
Grazie 1000
 
#!/bin/bash
sudo awk 'BEGIN { FS=":"; print 
"User\t\tUID\t\tGID\t\tHome\t\tShell\n================================================="; 
}
{print $1,"\t\t",$3,"\t\t",$4,"\t\t",$6,"\t\t",$7;}
END { print 
"============================================================\nFile 
Complete" }' /etc/passwd
 


Si, ma non ho capito cosa vuoi? :-)
 
bye,
 
-- 
 
piergiorgio


intanto non c'è bisogno di usare sudo,/etc/passwd è leggibile da tutti 
per default
se vuoi incolonnare ben bene devi usare la printf per le formattazioni
 
 


eseguilo e capirai il problema
 

 eseguilo e capirai il problema
 
Avevo intuito il tab traditore, volevo solo
che l'OP fosse piu` esplicito, invece di
buttare uno script e farlo provare...
 
Comunque non credo che "printf" da solo possa
risolvere molto. Potrei sbagliare.
 
bye,
 
-- 
 
piergiorgio


printf cosi da sola non puo certo risolvere in modo generalista,ma per 
un normale output di /etc/passwd direi di si.
 

 un normale output di /etc/passwd direi di si.
 
Scusa, non ti seguo.
 
Il problema e` che in /etc/passwd puoi avere un
login (per esempio) di 20 caratteri ed un altro
di 3 caratteri.
Non credo che printf consenta di stampare una
stringa ed aggiungere tanti spazi (per la seconda
colonna) quanti ne bastano per allinearsi alla
stringa login piu` lunga (che non e` nota).
 
Oppure mi sbaglio, ho capito male?
 
Ovviamente, uno potrebbe, forse stampare sempre
30 caratteri per il login (testo + spazi) e
sperare che nessun login abbia piu` di 29
caratteri. Oppure troncare tutto a 29, etc.
 
Mi sto complicando troppo la vita?
 
bye,
 
-- 
 
piergiorgio


Quello hai scritto è vero.
Ma con un po di logica,basta vedere il nome piu lungo esistente e 
basarsi su quello oppure troncare oltre un tot di caratteri.
Non sarà generalista ma comunque per le esigenze desiderate potrebbe 
andare bene.
 
 


ok provo con printf.
Grazieeeeeee

 andare bene.
 
Ah! OK!
 
Pensavo vi fosse un soluzione piu` "facile" con
printf, il che mi ha meravigliato.
D'altro canto, non si finisce mai di imparare... :-)
 
bye,
 
-- 
 
piergiorgio

Addi' 22 ott 2015, Piergiorgio Sartor scrive:

Il modo c'e' ed e' velocissimo, eccolo per il primo campo (UID) di
/etc/passwd:
LUNG_1="$(awk -F: '{print length($1)}' /etc/passwd | sort -r | head -n 1)"
 
ora, se vuoi ad esempio 3 spazi dopo UID, fai:
let LUNG_1="$LUNG_1 + 3"
 
cosi' adesso in definitiva nella variabile LUNG_1 hai la lunghezza
da dare a printf per il primo campo UID.
 
 
-- 
Tanti saluti
 

 da dare a printf per il primo campo UID.
 
Questo non rientra nella mia definizione di "facile"... :-)
 
Tra l'altro, se proprio vuoi, c'e` "wc -L" che fa quasi
tutto quello che hai scritto sopra...
 
Nello specifico:
 
LUNG_1=$( gawk -F':' '{print $1}' /etc/passwd | wc -L )
 
bye,
 
-- 
 
piergiorgio

 LUNG_1=$( gawk -F':' '{print $1}' /etc/passwd | wc -L )
 
Si', con wc risparmi una pipe.. non conoscevo la -L, TMTOWTDI. Ciao
 
 
-- 
Tanti saluti