AWK - Programmazione BASH controllo, aiuto!

Pubblicità

Dieguitos94

Utente Attivo
Messaggi
371
Reazioni
27
Punteggio
44
Salve a tutti! Sto facendo un progetto nel quale inserisco in un file di testo un'anagrafica degli studenti nel formato

nome;cognome;matricola;anno

Con una funzione richiesta poi, devo poter cercare per cognome uno studente e stamparlo nel formato;
Nome: Pippo
Cognome: Rossi
Matricola 123456
Anno: 4

E' ovviamente possibile che esistano più studenti con cognome Rossi e quindi il programma mi stampa egregiamente tutti gli studenti con cognome Rossi con la formattazione vista sopra.

Il problema sta nel fatto che, se per esempio "Rossi" fosse il nome, il programma mi stampa anche lo studente di nome Rossi (e non di cognome, come mi richiede l'esercizio).
Quindi se in anagrafica io ho:
Pippo;Rossi;123456;4
Rossi;Pippo;123457;2

In seguito alla presa in input che richiede di stampare solo gli studenti con cognome "Rossi" il programma mi stamperà sia la prima che la seconda riga, ovvero anche quella con lo studente Rossi Pippo(dove Pippo è ovviamente il cognome != Rossi).
Lo spezzone di codice che ho usato è il seguente:

Bash:
echo "Immettere il cognome della persona da ricercare"
read cognome

cognome="$(tr [A-Z] [a-z] <<< "$cognome")"
cut -d";" -f2 dati.txt | grep -w -q $cognome

if (( $? != 0 )); then

    echo ""
    sort -t \; -k 1 dati.txt | awk 'tolower($1) ~ /'$cognome'/{split($1,a,";")
        printf "     Nome: %s\n  Cognome: %s\nMatricola: %s\n     Anno: %s\n\n", a[1], a[2], a[3], a[4]}'
    echo "Premere INIVIO per tornare al menù principale"
    read

else

    echo $sfondorosso"ERRORE"$normale "Non è stato trovato nessuno studente con questo cognome"
    echo "Ritorno al menù principale..."
    return
fi

Avevo pensato di aggiungere un if che controlla se il valore di a[1] è uguale al cognome ma mi trovo in seria difficoltà con questo awk.
idee?
 
Fai prima il grep in cui cerchi il cognome composto da ;cognome, e poi fai il cut. Comunque è più efficiente fare prima il grep e poi il cut.
 
Fai prima il grep in cui cerchi il cognome composto da ;cognome, e poi fai il cut. Comunque è più efficiente fare prima il grep e poi il cut.
Scusami, non capisco.. potresti spiegarti meglio?

Ho praticamente invertito i due comandi ed ora ho:
grep -q -w $cognome dati.txt | cut -d";" -f2

ma non trova niente..

L'idea di base è che in teoria non faccio prima il grep perchè il grep cerca su tutto il file e quindi se sto cercando "Pippo" come cognome ed ho una persona che si chiama Pippo;Bello;123456;2 il grep senza le restrizioni del cut prende anche questa stringa!
 
Il cognome è tra due punti e virgola, mentre il nome è solo seguito da uno, quindi fai il grep di cognome incluso tra due punti e virgola.
 
Pubblicità
Pubblicità
Indietro
Top