Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam! Program zagląda rekurencyjnie do podkatalogów podanego jako parametr katalogu i zwraca jako wielkość katalogu łączną sumę zajętości plików. Dla zwykłego pliku drukuje jego zajętość. Problem pojawia się przy sortowaniu, bo przestało działać. Jeżeli w funkcji podkat odkomentuję wywołanie funkcji sortuj, to nie wypisze się lista zajętościowa dla wszystkich podkatalogów. Jeżeli nigdzie nie wywołuję funkcji sortuj, to wszystko działa, tylko, że wypisuje nieposortowane. Ktoś pomoże?
#!/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"); #sortuj(tab, i); 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", tab1[k,1]) ; printf("%-12s", tab1[k,2]) ; printf("%-7s", tab1[k,3]) ; printf("%-20s\n", tab1[k,4])}} 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 sortuj(tab, max, temp){ for(k=1; k<=max; k++){ for(i = 1; i<max; i++){ if(tab[i,1] < tab[j,1]){ for(j=1; j<5 ;j++){ temp = tab[i,j]; tab[i,j]= tab[i+1,j]; tab[i+1,j] = temp}#koniec fora najbardziej zagniezdzonego }#koniec ifa }}#koniec pierwszego i drugiego fora } 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"); #sortuj(tab2, j); 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
P.S. Sorry za styl, ale dzisiaj zacząłem pisać w tym języku i mam spore problemy ze składnią...
Ostatnio edytowany przez Khamell (2010-05-07 18:31:16)
Offline
O ile to nie jest program na zaliczenie, który musi być napisany w awk:
du --si -cs katalog/
Offline
Niestety to jest program na zaliczenie. Znalazlem coś takiego;
{for (wino in obrot) {print wino, obrot[wino] | "sort -nr +1" }}
tylko nie wiem jak teraz tego użyć do tablicy dwuwymiarowej, żeby mi sortował według pierwszego pola, czyli tab[k,1], gdzie znajduje sie liczba.
Edycja:
Udało mi się użyć funkcji sort, do sortowania tabeli dwuwymiarowej podczas wypisywania:
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}
Tylko, że skrypt wykrzacza się jak jest wywoływana funkcja podkat....czy ktoś powie mi, gdzie robię błąd? Błagam...
Edycja2: Temat do zamknięcia, skrypt napisany
Ostatnio edytowany przez Khamell (2010-05-09 11:53:35)
Offline