[awk] program przeglądający rekurencyjnie foldery

0

Skrypt przegląda rekurencyjnie podfoldery dla podanego folderu i tworzy listę zajętościową plików. Program jest nieodporny na spacje w nazwach folderów. Nie mam pojęcia co robię źle, ale w obecnej formie skrypt nie działa. Gdy zakomentujemy wywołanie funkcji podkat, elegancko wypisuje liste dla podanego folderu. Natomiast gdy wywołujemy podkat, a nie sortujemy w funkcji wypisz, to też ładnie wypisuje, z tymże nieposortowane. Proszę o wskazanie błędu, z góry dziękuję i przepraszam za styl...

#!/bin/bash
if [ -d $1 ] 
then
awk -vARG1=$1 'BEGIN{
i = 0
while (("ls -o "ARG1"" | getline) > 0){
if (NF > 2){
i++
tab[i,2] = $3 
if(substr($1,1,1) == "-"){
tab[i,1] = $4
tab[i,3] = "-"
tab[i,4] = $NF
} else if(substr($1,1,1) == "d") {tab[i,3] ="d" ; tab[i,4] = $NF; tab[i,1] = zlicz(ARG1 "/" $NF)}
else if(substr($1,1,1) == "l"){
tab[i,1] = $4
tab[i,3] = "l"
tab[i,4] = $NF}
}}
close ("ls -o"); 
wypisz(i, ARG1, tab);
podkat(tab, ARG1, i)
} #zakonczenie begina
function wypisz(ile_l, nazwa, tab1){
print("\nLista zajetosciowa dla folderu: ", nazwa );
printf("%-15s", "zajetosc w B") ; 
printf("%-12s", "uzytkownik") ; 
printf("%-7s", "rodzaj") ; 
printf("%-20s\n", "nazwa pliku");
for(k = 1; k<=ile_l; k++){printf "%-15s %-12s %-7s %-20s\n", tab1[k,1] , tab1[k,2] , tab1[k,3] , tab1[k,4] | "sort -nr -k 1,1"}
return}

function zlicz(kat, suma){
#close("ls -o")
while(("ls -o "kat"" | getline) > 0){
if (substr($1,1,1) == "d"){
suma+=zlicz(kat "/" $NF)
} else {suma+= $4}
}
#close("ls -o");
return suma
}
function podkat(tab, nazwa, dlugosc, tab2){	
for(i = 1; i<=dlugosc; i++){
		if(tab[i,3] == "d"){
		j=0
			while (("ls -o "nazwa tab[i,4]"" | getline) > 0){
				if(NF > 3){
					j++
					tab2[j,2] = $3 
					if(substr($1,1,1) == "-"){
					tab2[j,1] = $4
					tab2[j,3] = "-"
					tab2[j,4] = $NF
					}else if(substr($1,1,1) == "d") {tab2[j,3] ="d" ; tab2[j,4] = $NF; tab2[j,1] = zlicz(nazwa tab[i,4] "/" $NF)}
					else if(substr($1,1,1) == "l"){
					tab2[j,1] = $4
					tab2[j,3] = "l"
					tab2[j,4] = $NF}
				}#zamyka ifa
			}#zamyka whilea

			close ("ls -o");
			#wypisz(j, nazwa tab[i,4], tab2)
		}#zamykajacy ifa
	}#zamykajacy fora
}#zamykajacy funkcje

' #zakonczenie awk
else 
echo "Podano ścieżke do katalogu, który nie istnieje"
fi
0

Niesmialo przypominam o tym, ze zarowno w bashu jak i w awk ISTNIEJA komentarze i ich stosowanie bardzo ulatwia innym zrozumienie kodu. Napisz jakies komentarze co i jak to moze to rozkminie w wolnej chwili.

1 użytkowników online, w tym zalogowanych: 0, gości: 1