Pagina 1 di 1

[risolto] spezzare stringa in bash

Inviato: ven 20 gen 2017, 20:56
da sya54M
Ciao a tutti, spiego la situazione: ho una stringa in una variabile bash che può arrivare fino a 140 caratteri, e dovrei spezzarla massimo ogni 40 caratteri quando incontro il whitespace, quindi da una stringa ne devo ottenere fino a un massimo di 4, magari dentro un array... chi mi sa aiutare?
grazie!

Re: spezzare stringa in bash

Inviato: sab 21 gen 2017, 0:01
da targzeta
Se la stringa va spezzata ad ogni whitespace basta un semplice:

Codice: Seleziona tutto

array=($stringa)
Esempio:

Codice: Seleziona tutto

$> stringa="ciao mamma guarda come mi diverto"
$> array=($stringa)

$> set | grep -E 'stringa|array'
stringa='ciao mamma guarda come mi diverto'
array=([0]="ciao" [1]="mamma" [2]="guarda" [3]="come" [4]="mi" [5]="diverto")
Emanuele

Re: spezzare stringa in bash

Inviato: sab 21 gen 2017, 10:55
da sya54M
ciao emanuele, no, non ad ogni whitespace, ma all'ultimo whitespace entro i 40 caratteri. se per esempio la stringa è:

Codice: Seleziona tutto

stringa="ciao mamma guarda come mi diverto ciao mamma guarda come mi diverto ciao mamma guarda come mi diverto ciao mamma guarda come mi diverto"
dovrò ottenere un array così:

Codice: Seleziona tutto

array=([0]="ciao mamma guarda come mi diverto ciao" [1]="mamma guarda come mi diverto ciao mamma" [2]="guarda come mi diverto ciao mamma guarda" [3]="come mi diverto")
però la stringa iniziale può essere anche più breve, massimo 140 caratteri, quindi la dimensione dell'array non si sa, si sa solo che può essere massimo 4

Re: spezzare stringa in bash

Inviato: sab 21 gen 2017, 12:34
da conraid
Se ho capit
echo "$string" | fold -s -w40

Re: spezzare stringa in bash

Inviato: sab 21 gen 2017, 13:05
da sya54M
grande come sempre conraid!
io avevo risolto in questo modo:

Codice: Seleziona tutto

frase1array=($(echo $frase1))
i=0
str1=""
while [ ${#str1} -le 35 ]; do
	str1="$str1 ${frase1array[$i]}"
	let i=i+1
done
str2=""
while [ ${#str2} -le 35 ]; do
	str2="$str2 ${frase1array[$i]}"
	let i=i+1
done
str3=""
while [ ${#str3} -le 35 ]; do
	str3="$str3 ${frase1array[$i]}"
	let i=i+1
done
str4=""
while [ ${#str4} -le 35 ]; do
	str4="$str4 ${frase1array[$i]}"
	let i=i+1
done
ma con fold è molto più semplice

Re: spezzare stringa in bash

Inviato: sab 21 gen 2017, 14:00
da sya54M
ora ho fatto così:

Codice: Seleziona tutto

frase1array=($(echo $frase1 |fold -s -w40 |tr " " " "))
str1="$(echo ${frase1array[0]} |tr " " " ")"
str2="$(echo ${frase1array[1]} |tr " " " ")"
str3="$(echo ${frase1array[2]} |tr " " " ")"
str4="$(echo ${frase1array[3]} |tr " " " ")"
molto più semplice grazie a conraid