Pagina 1 di 1

[Risolto]Inserire interruzione di linea ad intervalli regola

MessaggioInviato: giovedì 17 gennaio 2019, 12:35
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.

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

MessaggioInviato: giovedì 17 gennaio 2019, 13:20
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

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

MessaggioInviato: giovedì 17 gennaio 2019, 14:22
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

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

MessaggioInviato: giovedì 17 gennaio 2019, 14:31
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

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

MessaggioInviato: giovedì 17 gennaio 2019, 14:35
da DoctorStrange
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 !!

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

MessaggioInviato: giovedì 17 gennaio 2019, 14:41
da UbuNuovo
La soluzione di Melfnt è ancora più semplice.

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

MessaggioInviato: giovedì 17 gennaio 2019, 14:46
da melfnt
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

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

MessaggioInviato: giovedì 17 gennaio 2019, 15:06
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.