- 268
- 11
- CPU
- intel i7 - 6700
- Dissipatore
- ARCTIC Freezer 7 Pro Rev. 2
- Scheda Madre
- Msi H170 Gaming M3
- HDD
- SSD: Samsung 850evo 250 GB + HDD WD Black 1TB
- RAM
- Corsair Vengeance 2133 Mhz 2x8
- GPU
- Gigabyte Nvidia GTX 1060 6GB Windforce
- Monitor
- HP Pavillon x24w
- PSU
- EVGA Supernova G3 - 550w
- Case
- NZXT H440 V2
- Periferiche
- Keyboard: Razer Blackwidow Chroma
- OS
- Windows 10
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:
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?
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?