[Risolto]Inserire interruzione di linea ad intervalli regola

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

[Risolto]Inserire interruzione di linea ad intervalli regola

Messaggio da DoctorStrange »

Buongiorno a tutti,

Ho uno script che genera una stringa di questo tipo:

Codice: Seleziona tutto

FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)
E vorrei trasformarlo in:

Codice: Seleziona tutto

FCA.MI 14.56 -0.04 (-0.30%) 
RACE.MI 99.3 0.08 (0.08%) 
TRN.MI 5.31 -0.00 (-0.08%) 
ENI.MI 14.27 -0.01 (-0.08%) 
ISP.MI 2.02 -0.01 (-0.39%)
Ovvero, vorrei inserire un carattere di interruzione linea ad intervalli regolari, ovvero esattamente ogni quattro valori diversi da zero.

Come potrei farlo, usando solamente bash? Tenete conto però, che il numero di spazi bianchi che separa ogni lettura, può variare, e non va preso come costante. Inoltre anche le costanti numeriche, possono variare il numero di caratteri di cui è composta la lettura stessa, in caso di rialzo o ribasso posso avere -0.08%, oppure 0.08%, come anche 0.2% o 2%.

Mi servirebbe una regex da passare ad esempio ad awk in modo parametrico.

Qualcuno mi può aiutare?

Grazie mille.
Ultima modifica di trekfan1 il giovedì 17 gennaio 2019, 17:04, modificato 2 volte in totale.
Motivazione: Non serve il tutto maiuscolo per il [Risolto], grazie
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Bash]Inserire interruzione di linea ad intervalli regol

Messaggio da rai »

Ciao, se devi farlo in pure bash

Codice: Seleziona tutto

for i in $output; do
    ((count++))
    line+=$i
    if [[ $((count%4)) = 0 ]]; then
        echo $line
        unset line
    fi
done
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Bash]Inserire interruzione di linea ad intervalli regol

Messaggio da UbuNuovo »

@DoctorStrange: Ciao, finalmente qualcuno che sa spiegare bene la situazione e quello che vuole ottenere!
@Rai: Ciao, il tuo metodo va bene sempre, ma ho notato che l'interruzione di riga è sempre dopo la chiusura delle parentesi tonde.
Se fosse un comportamento costante, si potrebbe sfruttare, per esempio con sed:

Codice: Seleziona tutto

txt='FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)'
sed 's/) /)\n/g' <<< "$txt"
provo

Codice: Seleziona tutto

8-) txt='FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)'
8-) sed 's/) /)\n/g' <<< "$txt"
FCA.MI 14.56 -0.04 (-0.30%)
RACE.MI 99.3 0.08 (0.08%)
TRN.MI 5.31 -0.00 (-0.08%)
ENI.MI 14.27 -0.01 (-0.08%)
ISP.MI 2.02 -0.01 (-0.39%)
8-)
Edit: Come non detto! Lo vuoi in pure Bash
Salva l'Ucraina! 🇺🇦
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Bash]Inserire interruzione di linea ad intervalli regol

Messaggio da melfnt »

con xargs:

Codice: Seleziona tutto

echo "FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)" | xargs -n4
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Bash]Inserire interruzione di linea ad intervalli regol

Messaggio da DoctorStrange »

UbuNuovo [url=https://forum.ubuntu-it.org/viewtopic.php?p=5108423#p5108423][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:@DoctorStrange: Ciao, finalmente qualcuno che sa spiegare bene la situazione e quello che vuole ottenere!
@Rai: Ciao, il tuo metodo va bene sempre, ma ho notato che l'interruzione di riga è sempre dopo la chiusura delle parentesi tonde.
Se fosse un comportamento costante, si potrebbe sfruttare, per esempio con sed:

Codice: Seleziona tutto

txt='FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)'
sed 's/) /)\n/g' <<< "$txt"
provo

Codice: Seleziona tutto

8-) txt='FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)'
8-) sed 's/) /)\n/g' <<< "$txt"
FCA.MI 14.56 -0.04 (-0.30%)
RACE.MI 99.3 0.08 (0.08%)
TRN.MI 5.31 -0.00 (-0.08%)
ENI.MI 14.27 -0.01 (-0.08%)
ISP.MI 2.02 -0.01 (-0.39%)
8-)
Edit: Come non detto! Lo vuoi in pure Bash
La tua soluzione mi piace molto !!

Grazie mille !!
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [RISOLTO]Inserire interruzione di linea ad intervalli re

Messaggio da UbuNuovo »

La soluzione di Melfnt è ancora più semplice.
Salva l'Ucraina! 🇺🇦
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [RISOLTO]Inserire interruzione di linea ad intervalli re

Messaggio da melfnt »

Intendevi dire quella di stackoverflow? :P
ma non è fatta in bash come voleva OP
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [RISOLTO]Inserire interruzione di linea ad intervalli re

Messaggio da UbuNuovo »

Sfruttando la parentesi e sostituendo in pure bash:

Codice: Seleziona tutto

8-) txt='FCA.MI 14.56 -0.04 (-0.30%) RACE.MI 99.3 0.08 (0.08%) TRN.MI 5.31 -0.00 (-0.08%) ENI.MI 14.27 -0.01 (-0.08%) ISP.MI 2.02 -0.01 (-0.39%)'
8-) echo -e ${txt//\) /\)\\n}
FCA.MI 14.56 -0.04 (-0.30%)
RACE.MI 99.3 0.08 (0.08%)
TRN.MI 5.31 -0.00 (-0.08%)
ENI.MI 14.27 -0.01 (-0.08%)
ISP.MI 2.02 -0.01 (-0.39%)
8-) 
 
Edit ho corretto avevo dimenticato la parentesi prima di \n.
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: nik1404 e 18 ospiti