Nowe posty

Autor Wątek: sprawdzenie ostatniej niedzieli miesiąca  (Przeczytany 4698 razy)

papeusz

  • Gość
sprawdzenie ostatniej niedzieli miesiąca
« dnia: 2008-05-07, 17:17:27 »
Witam.

Jak z polecenia "cal" wydobyć informację którym dniem miesiąca jest ostatnia w niedziela? Czy ktoś potrafiłby napisać taki skrypt, zwracający numer tego dnia?

Byłbym wdzięczny za pomoc.

arctgx

  • Gość
sprawdzenie ostatniej niedzieli miesiąca
« Odpowiedź #1 dnia: 2008-05-07, 17:41:03 »
Zadanko domowe?

man awk - niekoniecznie jedyne wyjście. Może nawet sam bash byłby w stanie sobie z tym poradzić.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
sprawdzenie ostatniej niedzieli miesiąca
« Odpowiedź #2 dnia: 2008-05-07, 19:01:51 »
dzien=`cal | grep NIEPUSTE LINIE REGEXPEM | tail OSTATNIA LINIA | awk PIERWSZA KOMÓRKA`
Dlaczego niepuste linie? Potestuj `cal` dla rożnych miesięcy, to zobaczysz, że czasem ostatnia linia jest pusta, a czasem zawiera kilka ostatnich dni miesiąca.

Reszta chyba jest zrozumiała, a przynajmniej powinna być po lekturze:
man grep
man tail / man head
man awk

Samo awk w sumie też wystarczy, ale tak jest bardziej bashowo :)

arctgx

  • Gość
sprawdzenie ostatniej niedzieli miesiąca
« Odpowiedź #3 dnia: 2008-05-07, 22:32:11 »
Jako "bashowy" określiłbym sposób, który nie potrzebuje nic ponad wbudowane polecenia powłoki, aby obrobić wyjście z cal. Ten korzysta z trzech zewnętrznych poleceń.

papeusz

  • Gość
sprawdzenie ostatniej niedzieli miesiąca
« Odpowiedź #4 dnia: 2008-05-08, 11:24:34 »
Serdecznie dziękuje, szczególnie "ULTR". To nie było żadne zadanko domowe, dawno już jestem po tym okresie życia :) Raczej nabywam dopiero doświadczenie związane ze skryptami powłoki. Brakowało mi tego usunięcia niepustych linii, teraz już wszystko jasne. Jeszcze raz dzięki.

arctgx

  • Gość
sprawdzenie ostatniej niedzieli miesiąca
« Odpowiedź #5 dnia: 2008-05-08, 19:11:41 »
Zabawiłem się i chyba jedna z bashowych wersji działa jak trza. Wyjście cal obrabiają tylko polecenia basha:
#!/bin/bash
# wywołanie: np.
# [b]. nazwa_pliku_z_tym_skryptem[/b]
# a potem
# [b]ostn miesiąc rok[/b]
ostn()
{
shopt -s extglob
local IFS=$'\\n';
#Ładujemy w tablicę M zawartość "cal miesiąc rok"
M=($(cal "$1" "$2"));
#Dopóki ostatni wiersz (czyli tydzień)
#oczyszczony z początkowych spacji jest pusty,
#pozbywamy się go
while [ ! ${M[$[${#M[*]}-1]]##*( )} ];
do
unset M[$[${#M[*]}-1]];
done;
# No i okrajamy wiersz do dwóch pierwszych znaków
echo "${M[$[${#M[*]}-1]]:0:2}"
}