Sie können verwenden, nl
um die Zeilen zu nummerieren (das ist der Zweck des Programms :). Aber Sie müssen die erste Woche im Monat irgendwo extrahieren. Es kann von ncal
selbst gemacht werden:
$ ncal -w 2 2012 | tail -1 | awk '{print $1}'
5
Wir fügen dies als Parameter in nl
die Option -v
(Startzeilennummer) ein und teilen es nur Zahlenzeilen mit Zahlen oder Leerzeichen mit.
$ cal 2 2012 | nl -bp'^[0-9 ]\+$' -w2 -s' ' -v$(ncal -w 2 2012 | tail -1 | awk '{print $1}')
February 2012
Su Mo Tu We Th Fr Sa
5 1 2 3 4
6 5 6 7 8 9 10 11
7 12 13 14 15 16 17 18
8 19 20 21 22 23 24 25
9 26 27 28 29
Das ist alles furchtbar zerbrechlich. Auf jeden Fall cal
funktioniert es , wenn Sie keine erweiterten Optionen benötigen . Sie können es in eine Datei einfügen und ersetzen"$@"
wo ich es abgelegt habe 2 2012
.
EDIT: Aber das ist FALSCH! Mir ist gerade aufgefallen, dass die erste Januarwoche die Nummer 52 oder 53 haben kann! Wir müssen also entweder eine Ausnahme für Januar machen oder einfach alle Wochennummern aus extrahieren ncal
und auf die Ausgabe von anwenden cal
.
Dies ist die Lösung, die ich ursprünglich dachte, aber ich dachte (fälschlicherweise), ich würde es mit vereinfachen nl
. Dabei werden paste
Dateien nebeneinander zusammengeführt. Da es keine Datei gibt, müssen wir den Bashismus verwenden <(...)
. das wollte ich vermeiden.
Unsere erste "Datei" ist eine Liste der Wochennummern mit zwei Leerzeilen am Anfang:
$ printf ' \n \n' && printf '%2d \n' $(ncal -w 1 2011 | tail -1)
52
1
2
3
4
5
Der zweite ist nur die Ausgabe von cal
. Alles in allem als Parameter für paste
:
$ paste -d' ' <(printf ' \n \n' && printf '%2d \n' $(ncal -w 1 2011 | tail -1)) <(cal 1 2011)
January 2011
Su Mo Tu We Th Fr Sa
52 1
1 2 3 4 5 6 7 8
2 9 10 11 12 13 14 15
3 16 17 18 19 20 21 22
4 23 24 25 26 27 28 29
5 30 31
Viel chaotischer und unvereinbarer als der andere. En fin ...
gcal --starting-day=Monday --with-week-number
Passt mehr zu meinen Bedürfnissen, aber dieses Tool ist großartig.