Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Tagliare spazi e virgole

    ciao,

    ho da leggere un file di testo riga per riga che contiene dei valori, per esempio:

    91, 8.1, 149, 145, 88, -0.08, 0.26

    105, 8.2, 157, 91, 83, 0.14, 0.27

    119, , , 70, 81, 0.19, 0.23

    estraggo un valore facendo per esempio:

    direzione=${riga:8:5}

    dove la variabile riga è appunto una riga in esame del file. Però così facendo alle volte mi prende il valore giusto..altre volte mi prende o degli spazi o la virgola insieme al numero, è possibile tagliare con un solo comando o due al massimo spazi, virgole e/o altri valori che non appartengono al campo che devo estrarre presenti prima o dopo il valore che mi serve in modo che la variabile direzione contenga solo il numero?
    Mi sono reco conto che alla fine il valore che devo estrare, per come è strutturato il file di testo, è quello compreso tra le 2 virgole..quindi mi serve migliorare l'estrazione in questo senso..

    come si può risolvere? ho visto qualcosa tipo sed o awk ma non sono riuscito a pervenire a niente per ora.
    grazie.
    PeppePegasus

  2. #2
    Ammettiamo che

    codice:
    riga="119, , , 70, 81, 0.19, 0.23"
    Io farei cosi`:

    1) Elimineri le virgole sostituendole con degli spazi

    codice:
    echo $riga | tr "," " "
    119      70  81  0.19   0.23
    2) Ridurrei gli spazi contigui ad un solo spazio

    codice:
    echo $riga | tr " " "," | sed -e 's/\ \+/\ /g'
    119 70 81 0.19 0.23
    In questo modo ottienti una stringa che puo` essere analizzata con awk

    codice:
    riga="119, , , 70, 81, 0.19, 0.23"
    riga="$(echo $riga |  tr " " "," | sed -e 's/\ \+/\ /g')"
    ora accedi con awk

    codice:
    colonna1="$(echo $riga | awk '{print $1}')"
    colonna3="$(echo $riga | awk '{print $3}')"
    
    echo $colonna1
    119
    
    echo $colonna3
    81

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  3. #3
    Grazie per la risposta..abbastanza interessante..però..non posso togliere gli spazi perchè ove non c'è il valore, ossia ho le due virgole separate da spazio, deve corrispondere in un'altra operazione che farò un valore vuoto.
    Ho provato con qualcosa del genere

    codice:
     echo "vert in" $int_vert | awk 'BEGIN { FS="," } { print $1 }'
    però se la riga è

    105, 8.2, 157, 91, 83, 0.14, 0.27

    va bene per tutte le righe del valore in oggetto ma quando arriva al valore 91 della riga sopra me lo toglie perchè mi estrae

    , 91,

    e non va bene. come posso risolvere con qualcosa del genere?
    grazie.
    ciao.
    PeppePegasus

  4. #4
    Se le virgole sono gia` il tuo separatore di campo allora e` ancora piu` semplice:

    codice:
    echo "1,2,3,4,   5     , 6" | awk -F, '{print $5}' | tr -d " "
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  5. #5
    ok grazie, vedrò come combinare le cose.
    ciao.
    PeppePegasus

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.