Documente Academic
Documente Profesional
Documente Cultură
Tema proiectului:
Aplicatie pentru prelucrarea continutului fisierelor
In imaginile de mai jos, sunt prezentate executiile scriptului, putandu-se observa atat valorile
parametrilor de intrare, cat si rezultatele. Fisierul folosit ca si parametru de intrare, se numeste
test.txt si are urmatorul continut:
1. Calcularea numarului de elemente, precum linii, cuvinte si caractere, dintr-un fisier dat ca
parametru in linia de comanda.
- Calcularea numarului de linii din fisierul dat ca parametru de intrare
4. Identificarea primelor n cuvinte cel mai des folosite dintr-un fisier dat ca parametru, folosind ca si
delimitatori caracterele spatiu si new line.
echo "
-minimax filename
in fisierul dat ca parametu"
}
# 03. Cautarea unui cuvant intr-un fisier - se afiseaza numarul si continutul randului
corespunzator fiecarei aparitii
# Cautarea cuvantului dat ca parametru se face cu ajutorul comenzii grep.
# Insa inainte de cautarea propriu-zisa, se prefixeaza fiecare linie cu munarul ei in cadrul
fisierului.
# Acest lucru este realizat cu ajutorul comenzii sed.
find_word() {
sed '/./=' $2 | sed '/./N; s/\n/ /' | grep $1
}
# 04. Identificarea primelor n cuvinte cel mai des folosite dintr-un fisier dat ca parametru,
utilizand un spatiu si
# linia noua ca delimitatori.
compute_word_statistics() {
tr -s ' ' '\n' < $2 | uniq -c | sort -r | head -n $1
}
# 05. Calcularea minimului si maximului dintr-un fisier dat ca parametru. Cuvintele/numerele din
fisier
# pot fi introduse pe mai multe linii, si sunt separate prin spatiu sau tab.
# Calculul acestor valori se face cu ajutorul comenzii awk. Aceasta parseaza linie cu linie
# fisierul de intrare, iterand pe fiecare camp din linie (campurile sunt considerate a fi
separate
# prin spatiu sau tab orizontal), si identificand numerele.
# Astfel, la parcurgerea intregului fisier, s-au calculat minimul, maximul, precum si
# numarul total de numere ce apar in fisier.
minimax() {
awk '
BEGIN {
max = -1000000;
min = 1000000;
count = 0;
}
function isnum(n) {return (n ~ /^[+-]?[0-9]+[.]?[0-9]*$/)}
{
for (i=1; i<= NF; i+=1) {
if ( isnum($i) ) {
if (max < $i) { max = $i; }
if (min > $i) { min = $i; }
count+=1;
}
}
}
END {
print "Numarul maxim este: " max;
print "Numarul minim este: " min;
print "In total au fost gasite " count " numere.";
}
' $1
}
# Executia scriptului incepe cu verificarea parametrilor de intrare.
# In functie de numarul lor, se face o validare a valorilor introduse pentru
# diversele operatii. In functie de identificarea valorilor parametrilor de
# intrare, se apeleaza una din functiile definite pentru fiecare din operatiile
# suportate de acest script. Apelurile de functii se fac prin retransmiterea
# parametrilor de intrare ai scriptului parinte.
# In cazul in care exista vreo greseala in ceea ce priveste numarul de parametri
# sau valorile acestora, se va afisa un mesaj de eroare precum si un mesaj de
# ajutor pentru explicarea folosirii corecte a scriptului.
case $# in
1)
if test "$1" = "-help"; then
usage
else
error
fi
;;
2)
if test "$1" = "-reverse"; then
reverse_lines $2
elif test "$1" = "-minimax"; then
minimax $2
else
error
fi
;;
3)
if test "$1" = "-find"; then
find_word $2 $3
elif test "$1" = "-count"; then
case $2 in
lines|words|characters)
count_lines $2 $3
;;
*)
error
;;
esac
elif test "$1" = "-statistics"; then
compute_word_statistics $2 $3
else
error
fi
;;
*)
error
;;
esac