[Risolto]Inserire interruzione di linea ad intervalli regola

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[Risolto]Inserire interruzione di linea ad intervalli regola

Messaggioda DoctorStrange » giovedì 17 gennaio 2019, 13:35

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, 18:04, modificato 2 volte in totale.
Motivazione: Non serve il tutto maiuscolo per il [Risolto], grazie
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1459
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

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

Messaggioda rai » giovedì 17 gennaio 2019, 14:20

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
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2219
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 16.04

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

Messaggioda UbuNuovo » giovedì 17 gennaio 2019, 15:22

@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
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3215
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

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

Messaggioda melfnt » giovedì 17 gennaio 2019, 15:31

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
melfnt
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1308
Iscrizione: ottobre 2011

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

Messaggioda DoctorStrange » giovedì 17 gennaio 2019, 15:35

UbuNuovo Immagine 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
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1459
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

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

Messaggioda UbuNuovo » giovedì 17 gennaio 2019, 15:41

La soluzione di Melfnt è ancora più semplice.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3215
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

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

Messaggioda melfnt » giovedì 17 gennaio 2019, 15:46

UbuNuovo Immagine ha scritto:La soluzione di Melfnt è ancora più semplice.

Intendevi dire quella di stackoverflow? :P
ma non è fatta in bash come voleva OP
melfnt
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1308
Iscrizione: ottobre 2011

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

Messaggioda UbuNuovo » giovedì 17 gennaio 2019, 16:06

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.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3215
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 4 ospiti