gtsla86 Napisano Lipiec 26, 2009 Zgłoszenie Share Napisano Lipiec 26, 2009 (edytowane) Witam. Jestem tu nowy więc z góry przepraszam za jakiekolwiek błędu w moich ambitnych pytaniach do forumowiczów. Mam pewien problem z zadaniami których treści są następujące: 1. Napisać w awk generator haseł losowych. Skrypt przymuje 0, 1 lub 2 argumenty. Jeśli są podane argumenty, to powinny one być liczbami całkowitymi (w zapisie dziesiętnym). * 2 argumenty: długość w znakach każdego z generowanych haseł i ich liczba * 1 argument: liczba generowanych haseł, długość domyślna (8 znaków) * 0 argumentów: generuje 1 hasło domyślnej długości (8) Wynik wywołania: wypisuje na stdout wygenerowane hasła, po 1 na linię. Hasła są (pseudo)losowymi ciągami znaków wybranymi z pewnego alfabetu, podanego w treści skryptu jako wartość napisowa pewnej zmiennej. Alfabet ten składa się z wielkich liter, cyfr i kilku znaków dodatkowych: "+", "-", "=", "?", ale z pominięciem liter "O" i "I" które łatwo pomylić z cyframi "0" i "1". 2. Napisać skrypt, posługujący się narzędziami shellowymi oraz ew. AWK, który dla każdego katalogu podanego jako argument na linii poleceń wypisze obok nazwy tego katalogu, liczbę oraz sumaryczny rozmiar w bajtach tych plików zwyczajnych, zawartych w poddrzewie zakorzenionym w danym katalogu, których data ostatniej modyfikacji jest nie dawniejsza niż 7 dni od chwili obecnej. do zadania 2 mam coś takiego: ls -lg | awk '$6 == "Nov" { sum += $5 } END { print sum }' ale w moim wypadku nie wyświetla mi po wpisaniu ls -lg czegoś takiego: -rw-r--r-- 1 arnold user 1933 Nov 7 13:05 Makefile -rw-r--r-- 1 arnold user 10809 Nov 7 13:03 gawk.h -rw-r--r-- 1 arnold user 983 Apr 13 12:14 gawk.tab.h -rw-r--r-- 1 arnold user 31869 Jun 15 12:20 gawk.y -rw-r--r-- 1 arnold user 22414 Nov 7 13:03 gawk1.c -rw-r--r-- 1 arnold user 37455 Nov 7 13:03 gawk2.c -rw-r--r-- 1 arnold user 27511 Dec 9 13:07 gawk3.c -rw-r--r-- 1 arnold user 7989 Nov 7 13:03 gawk4.c tylko np -rw-r--r-- 1 arnold user 1933 2009-07-07 Makefile jeśli ktoś jest w stanie mi pomóc w tym temacie czekam na odpowiedź i z góy bardzo mocno dziękuję Edytowane Lipiec 27, 2009 przez WalDo dodanie właściwych znaczników Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Lipiec 27, 2009 Zgłoszenie Share Napisano Lipiec 27, 2009 Tak ogólnie → http://rtfm.killfile.pl/#praca_domowa Co do tematów, które starałeś się rozwiązać samodzielnie i pokazałeś, że dokonałeś minimalnego wkładu własnego: [...] nie wyświetla mi po wpisaniu ls -lg czegoś takiego:No, to może w aktualnym katalogu jest tylko Makefile? Wiesz do czego służy opcja "-g"? Jeśli nie to przeczytaj "man ls" albo po prostu porównaj wyniki wyświetlenia. Będziesz wiedział, że warunek $6 == "Nov" jest bez sensu przy tym co chcesz zrobić. Aczkolwiek dziwne jest, że z wykorzystaniem "-lg" dostajesz wynik w rodzaju -rw-r--r-- 1 arnold user 1933 Nov 7 13:05 MakefileJakiego systemu i w jakiej wersji (również językowej) używasz? Podaj wynik poleceńuname -a locale Z jakiego shella korzystasz? BTW skrypty wypada zaczynać od określenia powłoki w jakiej skrypt ma być wykonany np. #!/bin/bash I jeszcze uwaga "redakcyjna" - kody umieszczaj między znacznikami [code][/code] (takie do 15 linijek) albo między [codebox][/codebox] jeśli coś dłuższego. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gtsla86 Napisano Lipiec 28, 2009 Autor Zgłoszenie Share Napisano Lipiec 28, 2009 skrypt ma być jedno linijkowy taki wstukiwany do terminala, mam narazie komende sumującą w awku: ls -lg | exec awk '{ sum += $4} END {print sum}' komenda która znajdzie pliki w bieżącym katalogu które były modyfikowane w ciągu ostatnich dwóch dni: find . -mtime -2 jak wstukuje coś takiego to nie śmiga mi całość: find . -mtime -2 | ls -lg | exec awk '{ sum += $4} END {print sum}' nie wiem gdzie błąd połeniam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Lipiec 28, 2009 Zgłoszenie Share Napisano Lipiec 28, 2009 Pomiń środkową cześć: find . -mtime -2 | exec awk '{ sum += $4} END {print sum}' EDIT: Wróć coś pokminiłem :|, nie bangla :| find . -mtime 7 | xargs ls -lg | awk '{ sum += $4} END {print sum}' już coś bardziej podobnego do tego... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Lipiec 28, 2009 Zgłoszenie Share Napisano Lipiec 28, 2009 nie wiem gdzie błąd połeniamPo pierwsze nie "s -lg" tylko "ls -lg". Po drugie (chociaż to w sumie ważniejsze) po jakiego diabła korzystasz z "ls" i "find" jednocześnie? Przeczytaj sobie takie fajne coś: "man find". Odszukaj opcję "-exec" i wykorzystaj ją z poleceniem "ls -lg". I dopiero wyjście tak skonstruowanego find'a przekieruj na wejście tego awk'a. Dodałbym jeszcze "-type f", bo w innym wypadku na wyjściu pokazuje się błąd, gdyż find znajduje również katalog bieżący (czyli .) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gtsla86 Napisano Lipiec 29, 2009 Autor Zgłoszenie Share Napisano Lipiec 29, 2009 Oj ta komenda ma mieć opcje najpierw właśnie find, później ls i na koniec awka bez żadnego upiększania. Drogi forumowiczu WalDo widzę że masz ogromną wiedzę w tych sprawach ale nie musisz mi w bardzo intelektualny sposób dogryzać na temat nikłej mej znajomości działania pojęć linuksowych. Ja tylko grzecznie poprosiłem o pomoc za co też z góry dziękuję. Drugiego zadania nie umiem nawet ruszyć. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Lipiec 29, 2009 Zgłoszenie Share Napisano Lipiec 29, 2009 [...] nie musisz mi w bardzo intelektualny sposób dogryzać [...]Chyba jesteś przewrażliwiony, bo akurat tutaj w żadnym miejscu nie próbowałem nawet być uszczypliwym. Wracając do tematu: chcesz powiedzieć, że musisz użyć dokładnie tych poleceń i przekierowania strumienia z jednego z nich do następnego? Bo ja zrobiłem to czego szukasz również z wykorzystaniem polecenia "find", "ls" i "awk". Tyle że "ls" w pewnym sensie zawarłem w poleceniu "find" (opcja -exec). [EDIT] Co do zadania nr.1 polecam → zaawansowane skryptowanie w bash'u. Szczególnie rozdział 9. może byc pomocny. I tym razem jak najbardziej złośliwie dodam, że wystarczy w Googlach poszukać → http://google.com/linux Hasło: "bash programowanie tutorial" albo "bash programowanie manual" Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gtsla86 Napisano Sierpień 1, 2009 Autor Zgłoszenie Share Napisano Sierpień 1, 2009 Przepraszam za wybuch gniewu ale ostatnio chodzę poddenerwowany tak jakoś i mam jeszcze nie miłę skojarzenia z osobami które pomagały mi wcześniej na forum i wykazywały sie przy tym ogromną wiedzą ale przekaz jej był na zasadzie: "ja jestem Bogiem a ty jesteś śmieciem więc ucz się jak na śmiecia przypadło". Sądzę że mój problem został już rozwiązany. Bardzo dziękuję za pomoc wszystkim. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Sierpień 1, 2009 Zgłoszenie Share Napisano Sierpień 1, 2009 Jak możesz to wrzuć tutaj rozwiązanie. Komuś, kiedyś może się przydać Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Sierpień 1, 2009 Zgłoszenie Share Napisano Sierpień 1, 2009 "ja jestem Bogiem a ty jesteś śmieciem więc ucz się jak na śmiecia przypadło".Jeśli o mnie chodzi to Bogiem chwilowo nie jestem, a innych ludzi raczej nie traktuję jak śmieci. Natomiast zawsze staram się stosować zasadę "wędka a nie ryba". "Rybą" najesz się teraz, ale to "wędka" zapewni dostatek "ryb" w przyszłości. Stąd moje wypowiedzi naprowadzające, ale nie podające jawnie rozwiązania co faktycznie może być denerwujące. Tak więc jeśli udało ci się dojść do rozwiązania samodzielnie, to gratuluję sukcesu @multics jeśli chodzi o zadanie nr.2 doszedłem do "jednolinijkowego" rozwiązania ls -lg | find . -type f -mtime -2 -exec awk '{ sum += $4} END {print sum}' {} \; Oczywiście cyfra/liczba przy parametrze "mtime" do modyfikacji zależnie od potrzeb. Do zadania nr.1 nie podchodziłem. Tak na oko widzę, że największy problem może sprawić algorytm "randomizacji" podanego w skrypcie ciągu znaków możliwych do wykorzystania. Z naciskiem na "algorytm", bo implementacja nie powinna nastręczać trudności. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gtsla86 Napisano Sierpień 12, 2009 Autor Zgłoszenie Share Napisano Sierpień 12, 2009 Po wpisaniu komendy ls -lg wyświetlane mam następujące elementy: razem 48 drwx------ 12 greg 4096 2009-05-27 16:21 2sem -rw-r--r-- 1 greg 746 2009-08-12 20:33 hasła.sh -rw-r--r-- 1 greg 753 2009-08-12 20:33 hasła.sh~ drwxr-xr-x 2 greg 4096 2009-07-28 14:48 nowy katalog drwxr-xr-x 2 greg 4096 2009-07-28 19:57 nowy katalog 2 -rw-r--r-- 1 greg 73 2009-08-12 19:42 test2 -rw-r--r-- 1 greg 91 2009-08-12 20:10 test3 -rw-r--r-- 1 greg 92 2009-08-12 20:09 test3~ -rw-r--r-- 1 greg 207 2009-08-12 21:34 test4 -rw-r--r-- 1 greg 212 2009-08-12 21:30 test4~ -rw-r--r-- 1 greg 299 2009-08-12 19:27 test.sh -rwxr-xr-x 1 greg 232 2009-06-23 02:03 Zainstaluj aplikacje.desktop Do zadania drugiego z sumowaniem plików których modernizacja nastąpiła w ciągu ostatnich siedmiu dni można łatwo samemu wyliczyć ich całkowitą wielkość dając na to że dzisiaj jst 12.08.2009 wielkość ta wynosi 2473 bajtów. Wpisując polecenie wyszukujące pliki modernizowane 7 dni temu find . -mtime -7 otrzymuje: . ./test4 ./test3 ./test2 ./test.sh ./test3~ ./hasła.sh~ ./hasła.sh ./test4~ a linia poleceń: find . -mtime -7 | ls -lg | awk '{ sum += $4} END {print sum}' daje rezultat: 14993 łatwo zauważyć że jest to suma wszystkich plików natomiast polecenie: find . -mtime -7 | xargs ls -lg | awk '{ sum += $4} END {print sum}' daje wartość: 17466. Odjęcie większej od mniejszej daje wartość szukaną w odpowiedzi. Natomiast polecenie: {code] ls -lg | find . -type f -mtime -7 -exec awk '{ sum += $4} END {print sum}' {} \; [/code] wyświetla: 0 0 0 0 0 0 0 -14 bardzo ciekawy rezultat Zastanawiam się gdzie jest błąd. Czy to ja coś źle zrobiłem czy po prostu któryś z was nie sprawdzał żadnego z tych poleceń. Mam nadzieję że jasno opisałem wszystko co robie po kolei. Nadal nie jest rozwiązane to zadanko. Co do zadania pierwszego, wykonałem je ale nie za pomocą awka a głównie za pomocą komendy: < /dev/urandom tr -cd '[:graph:]' | fold -w $dlugosc | head -n $liczba Pozdrawiam wszystkich i czekam z niecierpliwością na odpowiedź na temat zadania 2 hm, i nikt nadal nie odpowiedział jeszcze Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
gtsla86 Napisano Sierpień 25, 2009 Autor Zgłoszenie Share Napisano Sierpień 25, 2009 czy ktoś jeszcze to może zweryfikować co wyżej napisałem? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się