Pagina 1 di 1

BASH particolare formattazione

Inviato: ven 1 apr 2011, 15:00
da joe
Vorrei rendere a video un messaggio che mostra i valori di tre variabili: l'output dovrebbe essere semplicemente

Codice: Seleziona tutto

VAR_a1 VAR_a2 VAR_a3
VAR_b1 VAR_b2 VAR_b3
....
VAR_*1 è semplicemente un numero di riga 1 2 3 ecc var_*2 è una stringa corta di 4 caratteri.
Invece il problema è che var_*3 è una stringa di caratteri piuttosto lunga e sul terminale mi sta anche su 4 righe: rappresenta un "url" che voglio visualizzare all'utente.

Per ottenere un output un po' più ordinato avevo pensato ad una soluzione che portasse ad un output del tipo:

Codice: Seleziona tutto

1 aaaa  blablablabalblablablab
         blblblblblblblblaldsn
         lkndla
2 bbbb  vclaksnvsalvknlsvknsva
         laskvnlknsavlasknsvlv
         sldvknasvlkasnvsvsal
3 ....
Ma come ottenere un formato del genere?
Attualmente visulizzo le 3 variabili a video con un semplice "echo" che però spalma la variabile numero 3 su più righe in una forma poco ordinata.
Usando echo var1 var2 var3 ottengo qualcosa come:

Codice: Seleziona tutto

1  aaa  lkascnlcknslcnclskcn
lskcjnlsjcnclsdcnlkssk kscjs
lkjsncjn
2  bbb  oeiwoiewjrwoirjowifj
woifowiefowiefoweifowifeoeif
sjvnvlsjnvdiwelsjfafpqfnlkfa
3  ....
Avete idee su come rendere l'output del tipo di quello precedente?

Re: BASH particolare formattazione

Inviato: ven 1 apr 2011, 23:45
da albatrosla
Dunque, ti conviene usare dei "tab" per allineare tutto correttamente e spezzare l'output di echo a intervalli predefiniti. Facciamo un esempio:

Codice: Seleziona tutto

a=var1
b=var2
c=1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30
Se dai il comando echo "$a[TAB]$b[TAB]$c" ([TAB] va inserito, da terminale, con ctrl+v e dunque premendo il tasto TAB) ottieni:

Codice: Seleziona tutto

var1[TAB]var2[TAB]1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30
Ora, puoi spezzarlo con sed, inserendo ogni "tot" caratteri un carriage return, seguito da due spazi di tabulazione in modo da allineare tutto all'inizio della terza variabile. Ad esempio, spezzando ogni 15 caratteri:

Codice: Seleziona tutto

echo "$a[TAB]$b[TAB]$c"|sed 's/\(.\{15\}\)/\1\n\t\t/g'    
var1[TAB]var2[TAB]1_2_3_4_5_6
[TAB][TAB]_7_8_9_10_11_12
[TAB][TAB]_13_14_15_16_17
[TAB][TAB]_18_19_20_21_22
[TAB][TAB]_23_24_25_26_27
[TAB][TAB]_28_29_30
La sintassi di sed consiste nel sostituire (s) ricorsivamente (g) su ogni riga generici campi (\(\)) costituiti da 15 (\{15\}) caratteri qualsiasi (.) con i campi stessi (\1) seguiti da un carriage return (\n) e due TAB (\t\t).
Contando la lunghezza dei primi due campi, si può pensare di concatenare due operazioni di sed in modo da ottenere la prima riga lunga effettivamente quanto le successive (ovviamente esclusa l'ultima...).