Difference between revisions of "Prova Pratica 2014.06.17"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "==Testo== <source lang="text"> Il comando che dovrete implementare come script shell o programma python e' maxfreq. Maxfreq ha come parametro un carattere alfanumerico e una d...")
 
Line 39: Line 39:
 
echo "Il file $file contiene ${perc}% di $1 ($max su $dim caratteri)"
 
echo "Il file $file contiene ${perc}% di $1 ($max su $dim caratteri)"
 
</source>
 
</source>
 +
Ho sfruttato il comando bc per calcolare la percentuale. Utilizzo il parametro -q per impedire che stampi il "saluto" del programma e metto tutto il codice da eseguire nel file tmp. Oltre al comando, inserisco un "quit" per terminare il comando bc, che avrà restituito alla variabile soltanto il risultato del calcolo. Elimino poi ovviamente il file tmp.

Revision as of 11:15, 3 April 2015

Testo

Il comando che dovrete implementare come script shell o programma python e' maxfreq.
Maxfreq ha come parametro un carattere alfanumerico e una directory.
Es:
maxfreq q mydir
Cerca in tutto il sottoalbero del file system originato da mydir il file che ha la maggior frequenza della lettera indicata (in
questo caso la maggior frequenza di 'q'). Fornisce in output il nome del file e la frequenza in percentuale.

Soluzione di Davide Quadrelli

#! /bin/bash
if [[ -z $1 ]] ; then
	echo "maxfreq [char da contare] [directory]"
	exit
fi
if [[ -n $2 ]] ; then
	files=`find -L $2`
else
	echo if2
	echo "maxfreq [char da contare] [directory]"
	exit
fi
max=0
file=""
for var in $files; do
	tmp=`cat $var 2> /dev/null | grep -c $1 2> /dev/null`
	if [[ max -le tmp ]]; then
		max=$tmp
		file=$var
	fi
done
dim=`ls -l $file | cut -d " " -f 5`
echo "( ${max} * 100 ) / ${dim}" > tmp
echo "quit" >> tmp
perc=`bc -q tmp`
rm tmp
echo "Il file $file contiene ${perc}% di $1 ($max su $dim caratteri)"

Ho sfruttato il comando bc per calcolare la percentuale. Utilizzo il parametro -q per impedire che stampi il "saluto" del programma e metto tutto il codice da eseguire nel file tmp. Oltre al comando, inserisco un "quit" per terminare il comando bc, che avrà restituito alla variabile soltanto il risultato del calcolo. Elimino poi ovviamente il file tmp.