Io e il caro Lightuono abbiamo deciso di dare vita ad una nuova sezione del progetto bash: "Botta e Risposta"
C'è poco da dire al riguardo, ci si pone delle domande (su bash, ovvio! :D) e si cerca di dare una risposta. Ovviamente noi daremo una risposta, ma non è detto che sia l'unica possibile.
Insomma è importante anche il vostro contributo. Posta la domanda, saremo ben lieti di accogliere ulteriori soluzioni. :)
Ho un file di testo (miofile.txt) dove i numeri sono disposti nel modo seguente:
5
27
89
90
21
88
77
Per fare la somma dei numeri disposti in colonna, lancio il seguente script:
#!/bin/bash
somma=0
while read -r riga
do
somma=$((somma += riga))
done < $1
echo $somma
exit 0
Risultato:
$./somma.sh miofile.txt
397
PS1. Io personalemente faccio altro nella vita, non sono affatto un programmatore. Chi, invece, ne sa veramente tanto su bash è il caro Light. E' meglio che si sappia, senza di lui non ci sarebbe stato alcun progetto bash, tanto meno quest'ultima iniziativa.
PS2. Il vostro contributo è essenziale.
PS3. Presto aggiungeremo un link nell'indice del progetto bash che rimanda alla pagina "Botta e Risposta".
Ciao :)
Ed ecco qui una semplificazione o alternativa del comando ;) :
RispondiEliminafor i in $(cat NOMEFILE); do somma=$((somma+i)); done && echo $somma
Io invece farei in questo modo utilizzando il comando awk:
RispondiEliminaawk '{somma +=$1} END { print somma }' miofile.txt
Ciao
Jamil
@Jamil
RispondiEliminacaspita awk! Vero non ci avevo pensato XD
@Jamil
RispondiEliminaGrazie per il contributo :)
Vediamo se riesco a spiegarmi: io ho un file formato da 49044 righe di numeri divisi fra loro da ; a formare una specie di matrice con 41 colonne.
RispondiEliminaEs: 34; 45; 65; ...
45; 67; etc..
Io vorrei realizzare un nuovo file mantenendo lo stesso formato a 41 colonne, in cui ogni riga corrisponde alla media sulle colonne di 12 righe del file originale.
Mi spiego meglio: la prima riga sarà formata da 41 numeri ottenuti facendo la media colonna per colonna dei numeri contenuti nelle prime 12 righe del file originale; la seconda sarà la media delle righe 13-24 e via così.
Qualcuno sa come fare? Ovviamente in bash. Grazie
Lo puoi fare con awk! Se ti può essere d'aiuto, sto curando una guida, su questo blog... Quando avrò più tempo, ti saprò dare una risposta più precisa! :)
Elimina