Czy nie podoba ci się to, gdy każde z dwóch poleceń robi jedną rzecz, ale nie jedno i drugie?
To właśnie cal
robi. Ładne formatowanie. Brakuje jednak numerów tygodni:
$ cal
January 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
To właśnie ncal
robi. Dziwne formatowanie, ale z numerami tygodni:
$ ncal -w
January 2012
Su 1 8 15 22 29
Mo 2 9 16 23 30
Tu 3 10 17 24 31
We 4 11 18 25
Th 5 12 19 26
Fr 6 13 20 27
Sa 7 14 21 28
1 2 3 4 5
Rodzaj danych, które chcę, w rzeczywistości skrzyżowanie między cal
i ncal -w
:
$ cal --magik-calendar-week-option
January 2012
Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 6 7
2 8 9 10 11 12 13 14
3 15 16 17 18 19 20 21
4 22 23 24 25 26 27 28
5 29 30 31
bash
command-line
terminal
calendar
k0pernikus
źródło
źródło
gcal --starting-day=Monday --with-week-number
bardziej odpowiada moim potrzebom, ale to narzędzie jest świetne.Podkreśla dzisiejszą datę i może być wyświetlana w dowolnym miesiącu
$1
w postaci:YYYY-mm-dd
... Domyślnie jest to dzisiejsza dataSkonfigurowano go tak, aby wyświetlał numery tygodni ISO, a pierwszym dniem tygodnia jest poniedziałek.
Oto pokaz z tego miesiąca (z
20
podświetleniem)źródło
08
i09
interpretowane jako ósemkowe zamiast dziesiętnego .. Teraz powinno być dobrze ...Możesz użyć
nl
do numerowania linii (taki jest cel programu :). Ale musisz skądś wyodrębnić pierwszy tydzień w miesiącu. Można to zrobić zncal
samodzielnie:Wstawiamy to jako parametr do
nl
opcji-v
(numer linii początkowej) i mówimy, aby numerowała tylko linie z liczbami lub spacjami.To wszystko jest okropnie kruche. W każdym razie, jeśli nie będziesz potrzebować
cal
bardziej zaawansowanych opcji, zadziała. Możesz umieścić go w pliku i zastąpić"$@"
tam, gdzie umieściłem2 2012
.EDYCJA: Ale to jest ŹLE! Właśnie zauważyłem, że pierwszy tydzień stycznia może mieć numer 52 lub 53! Musimy więc zrobić wyjątek w styczniu lub po prostu wyodrębnić wszystkie liczby tygodni
ncal
i zastosować je do wynikucal
.To jest rozwiązanie, o którym myślałem pierwotnie, ale pomyślałem (błędnie), że uprościłem to przy użyciu
nl
. Używapaste
, który łączy pliki obok siebie. Ponieważ nie ma żadnego pliku, musimy użyć bashizmu<(...)
; tego chciałem uniknąć.Naszym pierwszym „plikiem” będzie lista numerów tygodni z dwoma pustymi wierszami na początku:
Drugi, tylko wynik
cal
. Wszystko razem, jako parametry dopaste
:O wiele bardziej niechlujny i niezgodny niż ten drugi. En fin ...
źródło
Wygeneruj sekwencję tygodni
ncal
i użyj,paste
aby mieć oba wyjścia obok siebie.Jeśli nie lubisz używania tabulatorów jako ograniczników, po prostu dodaj coś takiego
sed 's/\t/ /'
Edycja : znacznie prościej, nie musisz przejmować się kartami:
źródło
cal
incal
(inne podejścia replikują zachowanie jednegocal
lub dwóchncal
).Jednym sposobem jest użycie Perla (moim językiem wyjściowym
cal
polecenia jest hiszpański, ale mam nadzieję, że wynik nie różni się od angielskiego):Wynik:
Wyjaśnienie:
źródło
cal 02 2012
? Wydawało się, że działa w moim teście.Bez wystarczającej liczby powtórzeń, aby skomentować odpowiedź przez slm, gcal można zainstalować w systemie Mac OS przy użyciu
brew install gcal
.(Najpierw znalazłem odpowiedź tutaj, a potem tę odpowiedź na pytanie inaczej, ale w odpowiedzi na system unix brakowało wszystkich informacji potrzebnych do zainstalowania na komputerze Mac).
źródło
Oto moje rozwiązanie, które ma krótszy kod i działa dobrze dla innych dat niż bieżący miesiąc. Przepraszamy za naród amerykański, używa formatu ISO, tzn. Pierwszy dzień tygodnia to poniedziałek. Odbywa się to za pomocą opcji -m dla cal i opcji% V dla daty
źródło
Zrobiłem ten skrypt, aby wygenerować kalendarz dyżurów dla zespołów. Generuje kalendarz z numerami tygodni i przypisuje im nazwy (po prostu round-robin). Po wydrukowaniu wyniku wystarczy skopiować go do programu Excel i wykonać polecenie „tekst do kolumny” przez; i ponownie wykonaj „tekst do kolumny” w pierwszej kolumnie, używając opcji „naprawiono”. Zaletą tego kalendarza (w porównaniu z orientacją poziomą) jest to, że można użyć automatycznego filtrowania (Alt + dff) i znaleźć tylko tygodnie.
Przepraszamy, kod trochę nieprzyjemny ... i bez komentarzy ... ale działa dobrze;)
źródło
Naprawdę nie chcę instalować
gcal
i nie mogłem sprawić, by działał poprawnie w moim systemie. Zatem bez gcal odpowiedź funolleta jest rzeczywiście najlepszym rozwiązaniem. Właśnie zmieniłem to trochę, aby zachowało także formatowanie, takie jak podświetlenie dnia , kolory itp. Za pomocą polecenia. Usunąłem również zbędne znaki, dzięki czemu nadaje się jako alias:script
Lub zastąp
cal
nową funkcją. Jednak z tym nie można robić takich rzeczycal -3
. Otrzymujesz prawidłowe tygodnie, ale nie są one odpowiednio wyrównane. Prostym, ale niepełnym rozwiązaniem jest sprawdzenie, czycal
jest wywoływane bez argumentów, na przykład:źródło