sono nuovo nel forum e quindi mi presento...
Ho un file.txt che ha delle stringhe con dei campi delimitati da ";". Ogni riga ha delle informazioni, ad esempio: <nome>;<cognome>;<anno>.
Io devo cercare tutte quelle con un dato cognome, ordinarle in base al nome e stamparle in output.
La mia soluzione è questa:
Codice: Seleziona tutto
#!/bin/bash
cognome=""
present=false
echo "******************************************"
echo
echo -n "Inserire il cognome da cercare: "
read cognome
echo
listaCognomi=`cut -f2 -d';' studenti.txt | sed 's/<//g' | sed 's/>//g'`
righeCognomi=$(fgrep -i $cognome studenti.txt | wc -l | awk '{print $1}' )
riga=1
echo "Gli studenti con questo cognome sono: $righeCognomi"
echo
for studenti in $listaCognomi; do
if [ "`echo $listaCognomi | fgrep -i $cognome`" ]
then
nome=`fgrep -i $cognome studenti.txt | cut -f1 -d';' | sed 's/<//g' | sed 's/>//g' | sort -d`
cognomi=`fgrep -i $cognome studenti.txt | cut -f2 -d';' | sed 's/<//g' | sed 's/>//g'`
matricola=`fgrep -i $cognome studenti.txt | cut -f3 -d';' | sed 's/<//g' | sed 's/>//g'`
anno=`fgrep -i $cognome studenti.txt | cut -f4 -d';' | sed 's/<//g' | sed 's/>//g'`
for i in $matricola; do
while [ $riga -le $righeCognomi ]; do
echo Nome: $(echo $nome | cut -f$riga -d' ')
echo Cognome: $(echo $cognomi | cut -f$riga -d' ')
echo Matricola: $(echo $matricola | cut -f$riga -d' ')
echo Anno: $(echo $anno | cut -f$riga -d' ')
let riga+=1
echo
done
done
else
present=true
fi
done
if [ $present == true ];then
echo "Il cognome inserito non è presente nell'elenco"
echo
fi
Codice: Seleziona tutto
Nome: Mario
Cognome: Rossi
Matricola: 363456
Anno: 2
Nome: Matteo
Cognome: Rossi
Matricola: 321433
Anno: 1
Nome: Alessandro
Cognome: Rossi
Matricola: 213456
Anno: 1
In attesa di qualche risposta, grazie.
ciao
