Pagina 1 di 1
[Risolto] sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 8:02
da ugaciaka
allora, io ho un file con tot righe (non conosciute in partenza) fatto così
Codice: Seleziona tutto
fondamenti di informatica | 22/30 | 7
matematica A | 23/30 | 11
inglese | approvato |
vorrei riuscire ad intercettare i voti (22,23...) e i crediti (7,11...), per quelli che non hanno voti come inglese non me ne frega niente (è come se non esistessero)
Awk ho provato, ma con il fatto che stampa la tot parola con $numero non riesco a pigliare manco un 22/30 per esempio, dato che i nomi degli esami hanno degli spazi in mezzo
Sed, ok potrei fare una espressione regolare che mi intercetta dove ho dei numeri/30 ma come poi come faccio a prendere il voto e il credito?
Grazie mille
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 9:06
da ugaciaka
#!/bin/zsh
#totale_voti
#totale_crediti
#awk '// {print $2}' prova
#sed -n -e '/^[A-Za-z][a-c]/g' prova
cat prova
echo --------- \n
awk -F'|' '{print $2 $3}' prova > ecco
sed -e 's/ */ /g' ecco
con questo creo un nuovo file che praticamente mostra
Codice: Seleziona tutto
fondamenti di informatica | 22/30 | 7
matematica A | 23/30 | 11
--------- n
22/30 7
23/30 11
ci sono quasi, non ho capito perché su sed devo mettere " *" cioé due spazi e * per dire di sostituire gli spazi multipli con uno solo...io continuavo a mettere " *" come regex :-\
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 10:06
da ugaciaka
Codice: Seleziona tutto
#!/bin/zsh
awk -F'|' '{print $2 $3}' prova > ecco
# tolgo 30 e gli spazi doppi con uno spazio
sed --in-place "{s/\/30/ /;s/ */ /g}" ecco
ok ora ecco è giusto
ora per ogni riga devo fare in modo che 22*7+23*11...
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 10:21
da neonum6
usa cut -d" " -f1 per il primo campo, f2 per il secondo
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 10:47
da ugaciaka
azz, piccolo passo indietro, la situazione è più incasinata
Insegnamento Data Esito A.A. Valore Docente Stato esame
FISICA 2 18/05/2004 18/30 2004/05 7 crediti -OK-
FISICA 1 18/05/2004 20/30 2004/05 9 crediti -OK-
da qua come faccio a prendere gli esiti e i crediti?
Il problema è che le colonne (sopratutto la prima) hanno un valore variabile di spazi e non ho un delimitatore | come pensavo all'inizio

Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 10:54
da neonum6
nel caso in cui il numero di spazi è variabile usi awk
awk '{ print $3 $4 }'
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 11:00
da ugaciaka
neonum6 ha scritto:
nel caso in cui il numero di spazi è variabile usi awk
awk '{ print $3 $4 }'
sì ma se ho
fondamenti di informatica
matematica a
così mi conta fondamenti come prima parola...di seconda..così non funziona...i delemitatori delle colonne non possono essere spazi e non ho trovato altro...sto cercando di formattare meglio con sed ma non ci riesco
Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 11:03
da neonum6
comincia a contare all'indietro!
fai prima un rev, poi prendi i campi che ti servono, poi fai un'altro rev

Re: sed, awk: aiuto script conteggio voto laurea
Inviato: martedì 23 settembre 2008, 11:31
da ugaciaka
ok ce l'ho fatta, non ho seguito il tuo consiglio ma lo terrò a mente
Codice: Seleziona tutto
#!/bin/zsh
cat esami > esami_
sed --in-place '1d' esami_
sed --in-place '/APPROVATO/d' esami_
sed --in-place 's/[a-zA-Z]*//g' esami_
sed --in-place 's/^ *[0-9]//g' esami_
sed --in-place "{s/\/30//g}" esami_
awk '{print $2 " " $4}' esami_ > esami__
awk '// {crediti += $2} {voti += $1} {crediti_per_voti += $1*$2} END {print "voto minimo di laurea primo livello ex DM509-99: " (crediti_per_voti/crediti)*(110/30)}' esami__
rm esami_
rm esami__
praticamente con i fari sed pulisco e riformatto la tabella, poi awk a manetta. E' migliorabile ma a me funziona...
Grazie lo stesso ciao!