Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214

    Script bash: apertura e lettura da FILE

    Ciao a tutti, sto realizzando uno script che deve leggere da un file (o un elenco di file) una sorta di "parola chiave", la quale è seguita da un valore. Devo sommare tutti questi valori presenti dopo la "parola chiave". Sto incontrando qualche problema, anche perchè è la prima volta che realizzo uno script in bash. Chiedo aiuto a voi!

    Dunque, premetto che ho il divieto assoluto di usare sed e awk; avevo pensato di cercare la mia keyword con il comando grep, poi però non so come fare per leggere il valore che segue la mia keyword; ad esempio:

    miofile.txt
    codice:
    .......... 
    ......... 
    ..... 
    PIPPO 12 
    .......... 
    ......... 
    PIPPO 1
    codice:
    grep PIPPO -/miofile.txt
    Ora ho individuato PIPPO, ma a me serve il valore che c'è dopo di lui...Come faccio a prelevarlo? E inoltre, per trovare eventuali altri PIPPO all'interno del file, devo invocare la grep in un ciclo che ha come condizione di uscita cosa?

    Grazie a tutti in anticipo!

  2. #2

    Re: Script bash: apertura e lettura da FILE

    Originariamente inviato da Smoke666
    Ciao a tutti, sto realizzando uno script che deve leggere da un file (o un elenco di file) una sorta di "parola chiave", la quale è seguita da un valore. Devo sommare tutti questi valori presenti dopo la "parola chiave". Sto incontrando qualche problema, anche perchè è la prima volta che realizzo uno script in bash. Chiedo aiuto a voi!

    Dunque, premetto che ho il divieto assoluto di usare sed e awk; avevo pensato di cercare la mia keyword con il comando grep, poi però non so come fare per leggere il valore che segue la mia keyword; ad esempio:

    miofile.txt
    codice:
    .......... 
    ......... 
    ..... 
    PIPPO 12 
    .......... 
    ......... 
    PIPPO 1
    codice:
    grep PIPPO -/miofile.txt
    Ora ho individuato PIPPO, ma a me serve il valore che c'è dopo di lui...Come faccio a prelevarlo? E inoltre, per trovare eventuali altri PIPPO all'interno del file, devo invocare la grep in un ciclo che ha come condizione di uscita cosa?

    Grazie a tutti in anticipo!
    vediti il man di cut, nel tuo caso per estrarre il numero messo dopo lo spazio dovresti fare tipo

    grep PIPPO -/miofile.txt | cut -d" " -f2

    per sommarli usi let
    "L'utopia è come l'orizzonte: cammino due passi, e si allontana di due passi. Cammino di dieci passi, e si allontana di dieci passi. E allora, a cosa serve l'utopia? A questo: serve per continuare a camminare."
    Eduardo Galeano
    Il mio sito
    "if you want people to RTFM, make a better FM!"

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Grazie per la risposta! Volevo anche chiederti se era lecito fare una cosa del genere:
    codice:
    exec > $1 | grep -i -q PIPPO | let $count+=[cut -d" " -f 2]
    Ovvero reindirizzo lo stdout e il comando grep lo invoco senza il percorso del file... Inoltre grep trova solo la prima occorrenza della parola o tutte le occorrenze? Non l'ho trovato da nessuna parte..Grazie in anticipo mi sei stato utilissimo!


    Edit: Dimenticavo di esplicitare che eseguo exec >$1 perchè il file lo passo come parametro!

  4. #4
    Originariamente inviato da Smoke666
    Grazie per la risposta! Volevo anche chiederti se era lecito fare una cosa del genere:
    codice:
    exec > $1 | grep -i -q PIPPO | let $count+=[cut -d" " -f 2]
    Ovvero reindirizzo lo stdout e il comando grep lo invoco senza il percorso del file... Inoltre grep trova solo la prima occorrenza della parola o tutte le occorrenze? Non l'ho trovato da nessuna parte..Grazie in anticipo mi sei stato utilissimo!


    Edit: Dimenticavo di esplicitare che eseguo exec >$1 perchè il file lo passo come parametro!
    Provalo Comunque dovrebbe essere così

    for i in `cat $1 | grep -i -q PIPPO | cut -d" " -f 2`
    do
    let $count+=$i
    done

    con il for la i assume ad ogni ciclo uno dei valori che ti tiri fuori con la stringa (vediti come funzionano gli apici rovesciati `) e li somma uno per uno a $count

    edit: la tua stringa non funziona perchè gli chiedi di eseguire il file che vuoi visualizzare, quindi metti cat prima, che ti permette appunto di mandare in stdout il contenuto del file, lo mandi a grep che ti trova TUTTE le righe che contengono PIPPO, e l'output di grep lo reindirizzi a cut che ti prende solo i valori di cui hai bisogno e li manda in stdout uno per riga (se il file è fatto come hai spiegato te nel primo post), il ciclo for legge una riga per volta e la aggiunge a $count. Volendo potresti mettere un controllo sul fatto che $i sia un numero o meno, ma quello dipende da cosa devi fare con lo script, se sei sicuro che il file $1 sia fatto bene non ce n'è bisogno.
    "L'utopia è come l'orizzonte: cammino due passi, e si allontana di due passi. Cammino di dieci passi, e si allontana di dieci passi. E allora, a cosa serve l'utopia? A questo: serve per continuare a camminare."
    Eduardo Galeano
    Il mio sito
    "if you want people to RTFM, make a better FM!"

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Ho optato per questa riga:

    codice:
    echo $((`grep -Po '(?<=PIPPO )[0-9]+' /tmp/s.txt | tr '\n' +`0))
    Che stampa perfettamente il tutto ;-)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.