[Risolto] Bash e Awk problemi per fare operazioni con le somme delle colonne

Se avete dubbi o domande sulla programmazione in generale, fatele qui
Rispondi
nugh1975
Novello Arciere
Messaggi: 93
Iscritto il: 20 gennaio 2013, 13:14

[Risolto] Bash e Awk problemi per fare operazioni con le somme delle colonne

Messaggio da nugh1975 » 28 agosto 2013, 11:11

Ho un agenzia di poni express ed ho un file di testo dove scrivo le corse. Prima le gestivo con libreoffice ma adesso lo vorrei gestirele con file txt e script bash.

Questo è il file:

Codice: Seleziona tutto


Roma da 26-8-2013

Data          , Cliente      , <-> , Corsa                         , pony     ,   Tg ,  Contanti   
26-8-2013 , Fabi           , ->  ,  Fabi-via-Livenza          , Giorgio  ,    1  ,  10 
26-8-2013 , Fabi           , ->  ,  Fabi-via-Tevere          , Giorgio  ,    1  ,
26-8-2013 , Censic       , ->  ,  Ambascita-del-Vietnam  , Giorgio  ,    2  , 
26-8-2013 , Iss-3666    , ->  ,  S'Andrea                        , Giorgio ,    2  ,
27-8-2013 , Dornier     , <-  ,  Coface                         , Giorgio ,   2   ,
28-8-2013 , Cofib         , <-  ,  Via-Ludovisi                , Giorgio ,  1   ,   
Ho fatto un piccolo script per sommare la colonna dei contanti

Codice: Seleziona tutto

#!/bin/bash
echo " "
echo "Corse di $1"
echo " "
grep $1 Agosto13.txt 
echo " "
echo "Corse"
grep $1 Agosto13.txt | awk '{ tot=tot+$11};END{ print tot}'
echo "Contanti"
grep $1 Agosto13.txt | awk '{ tot=tot+$13};END{ print tot}'
Ora vorrei moltiplicare la colonna dei tagliandi per 2,40 e sottrare il risultato ottenuto alla somma dei contanti.

Grazie per l'aiuto.
Ultima modifica di nugh1975 il 31 agosto 2013, 13:54, modificato 2 volte in totale.
Archlinux 64bit KDE. Speleologo, mi piace andare in profondità nelle cose

Avatar utente
TheSaint
Robin Hood
Messaggi: 7937
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Bash e Awk problemi per fareoperazioni con le somme delle colonne

Messaggio da TheSaint » 28 agosto 2013, 11:19

Hai provato a leggereABS.
Considera che il separatore per difetto è uno spazio, quindi i campi di awk sono da contare dopo ogni spazio.
Poi potrebbe bastare anche il solo AWK. Il concetto è nello studiare un pò quello che si vuole utilizzare.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

nugh1975
Novello Arciere
Messaggi: 93
Iscritto il: 20 gennaio 2013, 13:14

Re: Bash e Awk problemi per fareoperazioni con le somme delle colonne

Messaggio da nugh1975 » 28 agosto 2013, 11:59

Ho adesso modificato lo script usando l'opzione -F",":

Codice: Seleziona tutto

#!/bin/bash
echo " "
echo "Corse di $1"
echo " "
grep $1 Agosto13.txt | awk -F "," '{ print $1 $2 $3 $4 $5 $6 $7 }'
echo " "
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$6}; END{ print "Tagliandi fatti= , " tot}'
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$6}; END{ print "Tagliandi per 2.4 = € , " tot*2.4}' 
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$7}; END{ print "Acconti o contanti= € , " tot}' 
echo " "
Adesso non so come fare le operazioni sulle colonne
Archlinux 64bit KDE. Speleologo, mi piace andare in profondità nelle cose

marco
Little John
Messaggi: 966
Iscritto il: 3 settembre 2007, 13:54
Architettura: x86_64 (64bit)
Località: Cagliari

Re: Bash e Awk problemi per fareoperazioni con le somme delle colonne

Messaggio da marco » 28 agosto 2013, 13:27

Considera anche la possibilità di usare un database sql come SQLite, che puoi gestire anche tramite script.
Linux registered user # 443055

Avatar utente
TheSaint
Robin Hood
Messaggi: 7937
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Bash e Awk problemi per fareoperazioni con le somme delle colonne

Messaggio da TheSaint » 29 agosto 2013, 13:22

nugh1975 ha scritto:Ho adesso modificato lo script usando l'opzione -F",":

Codice: Seleziona tutto

#!/bin/bash
echo " "
echo "Corse di $1"
echo " "
grep $1 Agosto13.txt | awk -F "," '{ print $1 $2 $3 $4 $5 $6 $7 }'
echo " "
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$6}; END{ print "Tagliandi fatti= , " tot}'
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$6}; END{ print "Tagliandi per 2.4 = € , " tot*2.4}' 
grep $1 Agosto13.txt | awk -F"," '{ tot=tot+$7}; END{ print "Acconti o contanti= € , " tot}' 
echo " "
Adesso non so come fare le operazioni sulle colonne
Ma, se già stai usando tot che somma la sesta colonna. Uguale potrebbe essere per le altre, oppure le espressioni di un colonna con una altra, tipo {conto =$3/$6; print conto} oppure conto lo visualizzi alla END
Se conosci l' inglese questo è un buon inizio, anche questo.
Questo è in Italiano. Se vuoi, basta una ricerca con "awk example".

@marco: non vedo la necessità di implicare altri tipi di programmi, la richiesta è alquanto esplicitamente orientata a quel tipo di programma.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

nugh1975
Novello Arciere
Messaggi: 93
Iscritto il: 20 gennaio 2013, 13:14

Re: Bash e Awk problemi per fare operazioni con le somme delle colonne

Messaggio da nugh1975 » 29 agosto 2013, 17:59

Per adesso ho risolto così

Codice: Seleziona tutto

#!/bin/bash
echo " "
echo "Corse del $1 di $2 di $3 "
echo " "
grep $1 $2 | grep $3  | awk -F "," '{ print $1  $2  $3  $4  $5  $6  $7  }'
echo " "
grep $1 $2 | grep $3 | awk -F"," '{ tot=tot+$6}; END{ print  "Tagliandi fatti=  " tot}'
grep $1 $2 | grep $3 | awk -F"," '{ tot=tot+$6}; END{ print "Tagliandi per 2.4 = €  " tot*2.40}' 
grep $1 $2 | grep $3 | awk -F"," '{ tot=tot+$7}; END{ print "Importo corse contanti= €  " tot}' 
grep $1 $2 | grep $3 | awk -F"," '{ tot=tot+$6};{ fot=fot+$7}; END{ print "Guadagno al netto degli acconti= €  " (tot*2.40)-fot}'
echo " "
Bastava cabiare il penultimo tot con un altro nome (fot).

Grazie per i suggerimente.
@marco
All'università ho studiato un po di Sql e ci stavo pensando a SQLite, ma non vorrei mettere troppa carne al fuoco.
@TheSaint
Grazie per le guide, le sto leggendo anche se il mio inglese e un livello base. Ma le estensioni di Firefox dannno una bella mano.

Adesso vorrei formattare l'output nel formato dell'Euro.
Archlinux 64bit KDE. Speleologo, mi piace andare in profondità nelle cose

Avatar utente
TheSaint
Robin Hood
Messaggi: 7937
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Bash e Awk problemi per fare operazioni con le somme delle colonne

Messaggio da TheSaint » 30 agosto 2013, 14:46

Mettici [Risolto] al titolo del primo post.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Rispondi