[Risolto] sed, awk: aiuto script conteggio voto laurea

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

[Risolto] sed, awk: aiuto script conteggio voto laurea

Messaggio 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
Ultima modifica di Anonymous il martedì 23 settembre 2008, 11:31, modificato 1 volta in totale.
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio 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  :-\
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio 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

Codice: Seleziona tutto

 22 7
 23 11
ora per ogni riga devo fare in modo che 22*7+23*11...
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Avatar utente
neonum6
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 633
Iscrizione: sabato 25 febbraio 2006, 17:13
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio da neonum6 »

usa cut -d" " -f1 per il primo campo, f2 per il secondo
Impossible is 0.
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio 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  :(
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Avatar utente
neonum6
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 633
Iscrizione: sabato 25 febbraio 2006, 17:13
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio da neonum6 »

nel caso in cui il numero di spazi è variabile usi awk

awk '{ print $3 $4 }'
Impossible is 0.
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio 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
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Avatar utente
neonum6
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 633
Iscrizione: sabato 25 febbraio 2006, 17:13
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio da neonum6 »

comincia a contare all'indietro!
fai prima un rev, poi prendi i campi che ti servono, poi fai un'altro rev
;)
Impossible is 0.
Avatar utente
ugaciaka
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1960
Iscrizione: martedì 31 ottobre 2006, 19:00
Località: Belluno
Contatti:

Re: sed, awk: aiuto script conteggio voto laurea

Messaggio 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!
non ho mai comprato su ebay, i macbook non mi piacciono, non ho bisogno di facebook né myspace né secondlife
non sono un nerd né lamer né troll né geek né cracker né hacker
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti