Woche des Monats ermitteln
Hallo, wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw. Gruß und Dank i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
From: "prengel" Sent: Thursday, September 03, 2009 11:50 AM
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
Zwar keine Ahnung, aber eine Idee: Wir machen unsere Backups hier nach Kalenderwochen. Das geht auf jeden Falls mit Ziel='/home/.Backup/'`date +%Y`'/'`date +%0V`'. KW' mkdir "$Ziel" -p ... tue was mit Ziel Ich schätze aber, dass date so umfänglich ist, dass es auch dafür eine Lösung gibt... Gruß, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi prengel! On Do, 03 Sep 2009, prengel wrote:
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
Vergiß es. Datumsarithmetik ist zu komplex, um es mit Shell-Script abzufackeln und man muß zuviele Sonderfälle betrachten. Dabei schießt man sich zu leicht in den Fuß. Nimm eine richtige Scriptsprache. Oder besser, verwende eine andere Nummerierung, z.B. ISO-Week das ist eindeutig definiert und mit date '+%V' auch abfragbar. Wo beginnt für dich eine Woche Sonntag oder Montag? Wenn Montag, zu welcher Woche gehört der 01.02.2009, wenn Sonntag, zu welcher Woche gehört der 01.08.2009? Wozu gehört der 01.01.2010? Mit freundlichen Grüßen Christian -- Im Kanal wurde eine in einem Sack fest verschnürte Leiche gefunden. Selbstmord scheint ausgeschlossen. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
At Thu, 3 Sep 2009 13:12:35 +0200, Christian Brabandt wrote:
Wo beginnt für dich eine Woche Sonntag oder Montag? Wenn Montag, zu welcher Woche gehört der 01.02.2009, wenn Sonntag, zu welcher Woche gehört der 01.08.2009?
Na, Woche 5 und 31 natuerlich :-) Entweder stehe ich dicke auf dem Schlauch, oder ich verstehe die Logik nicht so ganz. Ich sehe dabei jedenfalls kein Problem, egal ob die Woche mit einem SO oder MO beginnt... -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Heinz! On Do, 03 Sep 2009, Heinz Diehl wrote:
At Thu, 3 Sep 2009 13:12:35 +0200, Christian Brabandt wrote:
Wo beginnt für dich eine Woche Sonntag oder Montag? Wenn Montag, zu welcher Woche gehört der 01.02.2009, wenn Sonntag, zu welcher Woche gehört der 01.08.2009?
Na, Woche 5 und 31 natuerlich :-)
Der OP wollte: ,---- | wie kann ich die laufende Woche eines Monats per shell-script | ermitteln. `---- Also Januar: 1-5, Februar: 1-4, März: 1-5? Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2? Mit freundlichen Grüßen Christian -- Snoring is prohibited unless all bedroom windows are closed and securely locked. [real standing law in Massachusetts, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Also Januar: 1-5, Februar: 1-4, März: 1-5?
Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2?
In userem Fall die erste Woche des Monats während der 02.02 in der zweiten Woche liegt. i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Ralf, Am Donnerstag, 3. September 2009 schrieb ralf.prengel@comline.de:
Also Januar: 1-5, Februar: 1-4, März: 1-5?
Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2?
In userem Fall die erste Woche des Monats während der 02.02 in der zweiten Woche liegt. Korrekterweise würde das zur letzten Woche des Januars gehören. Wäre aber ohnehin egal, da es ein Sonntag war und ihr ja Freitags sichert.
Ich glaube, das lässt sich so einfach nicht lösen. Es sei denn, Dir sind die realen Wochennumern egal. Wenn dem so ist, lass' einfach die Tage auszählen und weise selbst eine Wochennummer zu. Das hat dann den Vorteil, das Script läuft jedes Jahr ohne Änderung, wenn Du eine Schaltjahrabfrage einbaust. Oder, ich glaube das ist noch besser, Du stellst einfach fest, zu welchem Monat der Freitag gehört, an dem Du sichern willst. Dann stellst Du fest, welche Wochen des gleichen Monats bereits existieren und zählst eine Woche weiter. Ansonsten liegt das Problem in der ersten KW des Jahres, die per Definition entschieden wird. Sollte der 01.01. zB ein Samstag sein, dann gehören der 01.01. und 02.01. zur letzten Kalenderwoche des letzten Jahres und KW1 beginnt am 03.01. Wenn ich mich recht erinnere, muss der Januar die ersten 4 Tage in einer Woche haben, die lt. ISO mit Sonntag endet, um die KW1 zu erhalten.
i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany
Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de
www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi ralf.prengel! On Do, 03 Sep 2009, ralf.prengel@comline.de wrote:
Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2?
In userem Fall die erste Woche des Monats während der 02.02 in der zweiten Woche liegt.
Ich bleibe dabei, eklig ist es trotzdem. Hier mein Versuch: ,---- | #!/bin/bash | | help() { | cat <<EOF | `basename $0` Datum | | `basename $0` berechnet die laufende Woche eines Monats. | Das Datum muß im Format "MM/TT/YYYY" vorliegen. | EOF | exit 1 | } | | | if [ "$#" -ne 1 ]; then | run=0 | fi | | # Bei Fehlern auskommentieren und | # untere case Anweisung nutzen: | if [[ "$1" =~ [[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4} ]]; then | run=1 | else | run=0 | fi | | # Falls die bash =~ noch nicht unterstüzt, kann man obiges auch | # mit case ausdrücken | # (ohne Prüfung auf Ziffern): | #case "$1" in | #??/??/????) run=1 ;; | #?/??/????) run=1 ;; | #?/?/????) run=1 ;; | #??/?/????) run=1 ;; | #*) run=0 ;; | #esac | | if [ $run -eq 0 ]; then | help | fi | | | IFS='/' | set -- $1 | | monat="$1" | tag="$2" | jahr="$3" | | | f_day_month="$(date -d "$monat"/01/"$jahr")" | | let "first_week = 10#"$(date -d"$f_day_month" '+%W')"" | | if [ "$first_week" = "53" ]; then | first_week = 1 | fi | | let "cur_week = 10#"$(date -d"$monat"/"$tag"/"$jahr" '+%W')"" | | week="$(($cur_week - $first_week + 1))" | if [ "$week" = '0' -a "$monat" != "01" ]; then | let "monat = 10#$monat - 1" | case $monat in | 1|3|5|7|8|10|12) let week=$("./$0" "$monat"/31/"$jahr") ;; | 4|6|9|11) let week=$("./$0" "$monat"/30/"$jahr") ;; | 2) let week=$("./$0" "$monat"/28/"$jahr") ;; | esac | fi | | echo $week `---- Mit freundlichen Grüßen Christian -- A parent can be arrested if his child cannot hold back a burp during a church service. [real standing law in Nebraska, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi opensuse-de! On Do, 03 Sep 2009, Christian Brabandt wrote: Da war wohl noch ein Fehler vom Test drin. Das Skript braucht sich ja gar nicht mehr selbst aufrufen. Am besten die letzte If-Bedingung rauswerfen, dann sollte es so aussehen:
,---- | #!/bin/bash | | help() { | cat <<EOF | `basename $0` Datum | | `basename $0` berechnet die laufende Woche eines Monats. | Das Datum muß im Format "MM/TT/YYYY" vorliegen. | EOF | exit 1 | } | | | if [ "$#" -ne 1 ]; then | run=0 | fi | | # Bei Fehlern auskommentieren und | # untere case Anweisung nutzen: | if [[ "$1" =~ [[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4} ]]; then | run=1 | else | run=0 | fi | | # Falls die bash =~ noch nicht unterstüzt, kann man obiges auch | # mit case ausdrücken | # (ohne Prüfung auf Ziffern): | #case "$1" in | #??/??/????) run=1 ;; | #?/??/????) run=1 ;; | #?/?/????) run=1 ;; | #??/?/????) run=1 ;; | #*) run=0 ;; | #esac | | if [ $run -eq 0 ]; then | help | fi | | | IFS='/' | set -- $1 | | monat="$1" | tag="$2" | jahr="$3" | | | f_day_month="$(date -d "$monat"/01/"$jahr")" | | let "first_week = 10#"$(date -d"$f_day_month" '+%W')"" | | if [ "$first_week" = "53" ]; then | first_week = 1 | fi | | let "cur_week = 10#"$(date -d"$monat"/"$tag"/"$jahr" '+%W')"" | | week="$(($cur_week - $first_week + 1))" | | echo $week `----
(Fehler könnten trotzdem noch drin sein ;) Mit freundlichen Grüßen Christian -- So when I saw the post to comp.editors, I rushed over to the FTP site to grab it. So I yank apart the tarball, light x candles, where x= the vim version multiplied by the md5sum of the source divided by the MAC of my NIC (8A3FA78155A8A1D346C3C4A), put on black robes, dim the lights, wave a dead chicken over the hard drive, and summon the power of GNU GCC with the magic words "make config ; make!". [Jason Spence, compiling Vim 5.0] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
-----Ursprüngliche Nachricht----- Von: Christian Brabandt [mailto:cblists@256bit.org] Gesendet: Donnerstag, 3. September 2009 14:55 An: opensuse-de@opensuse.org Betreff: Re: Woche des Monats ermitteln
Hi ralf.prengel!
On Do, 03 Sep 2009, ralf.prengel@comline.de wrote:
Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2?
In userem Fall die erste Woche des Monats während der 02.02 in der zweiten Woche liegt.
#!/bin/ksh week_no=`cal $2 $3 | sed -n "3,$ p" | sed -n "/$1/{=;q;}"` echo $week_no Exit Im Netz gefunden i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo ralf.prengel! Bitte achte auf dein Quoting! ralf.prengel@comline.de schrieb am Donnerstag, den 03. September 2009:
On Do, 03 Sep 2009, ralf.prengel@comline.de wrote:
Von: Christian Brabandt [mailto:cblists@256bit.org]
Jetzt rechne nach, wieviele Wochen der Februar hat, wenn die Woche am Montag beginnt. Gehört der 01.02.2009 zur Woche 1 und der 02.02. bereits zur Woche 2?
In userem Fall die erste Woche des Monats während der 02.02 in der zweiten Woche liegt.
#!/bin/ksh week_no=`cal $2 $3 | sed -n "3,$ p" | sed -n "/$1/{=;q;}"` echo $week_no
Das ist mal eine clevere Lösung! Nur passt sie noch nicht, auf das was du oben sagst ;) Da sollte dann wohl eher eher heißen: ,---- | #!/bin/sh | echo `cal -m $2 $3 | sed -n "3,$ p" | sed -n "/$1/{=;q;}"` `---- Mit freundlichen Grüßen Christian -- Females are strictly forbidden to appear unshaven in public. [real standing law in New Mexico, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Christian Brabandt schrieb:
Das ist mal eine clevere Lösung! Nur passt sie noch nicht, auf das was du oben sagst ;) Da sollte dann wohl eher eher heißen:
,---- | #!/bin/sh | echo `cal -m $2 $3 | sed -n "3,$ p" | sed -n "/$1/{=;q;}"` `----
War bisher auch erst mal ein Treffer das es überhaupt geht. Wir schrauben noch munter herum. Gruß -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Wo beginnt für dich eine Woche Sonntag oder Montag? Wenn Montag, zu welcher Woche gehört der 01.02.2009, wenn Sonntag, zu welcher Woche gehört der 01.08.2009? Wozu gehört der 01.01.2010?
Die Woche beginnt in diesem Fall Montags weil dann neu produziert wird. Wir sichern unter anderem wochenweise im Nachgang ab FR wenn die Kollegen raus sind. Ansonsten geht es immer um die Woche im Monat. 1.1.2010 ist also die erste Woche des Monats Januar. Gruß i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
prengel schrieb:
Hallo,
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
Gruß und Dank i.A. Ralf Prengel Manager Customer Care Comline AG Hauert 8 D-44227 Dortmund/Germany
Fon +49 231 97575 904 Fax +49 231 97575 257 Mobil +49 151 10831 157 EMail Ralf.Prengel@comline.de
www.comline.de Vorstand Stephan Schilling, Erwin Leonhardi Aufsichtsrat Dr. Franz Schoser (Vorsitzender) HR Dortmund B 14570 USt.-ID-Nr. DE 124727422
Falls noch nicht gelöst, hier eine Idee für den Lösungsansatz: Der Tag im Monat muß 'normalisiert' werden. Er muß so verändert werden, als wenn der Monat mit einem Montag beginnen würde. Also der Wert des Wochentags (montag, dienstag, ... sonntag) um 1 reduziert darauf addieren. Danach haust du weitere 6 drauf und teilst das Ergebnis durch 7. Der Ganzzahlanteil sollte die gewünscht Wochennummer sein. Also ganz hypothetisch. -- Mit freundlichen Grüßen Martin Blank -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
date --help sagt unter anderem: %U Wochennummer des Jahres mit Sonntag als erstem Tag der Woche (00..53) scheint also irgendwie mit date zu gehen. Gruss Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 3. September 2009 23:23:01 schrieb Karl Sinn:
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
date --help
sagt unter anderem: %U Wochennummer des Jahres mit Sonntag als erstem Tag der Woche (00..53)
scheint also irgendwie mit date zu gehen.
Es hat geklappt :-): date '+%U' Gruss Karl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 3. September 2009 schrieb Karl Sinn:
Am Donnerstag, 3. September 2009 23:23:01 schrieb Karl Sinn:
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
date --help
sagt unter anderem: %U Wochennummer des Jahres mit Sonntag als erstem Tag der Woche (00..53)
scheint also irgendwie mit date zu gehen.
Es hat geklappt :-):
date '+%U'
Bitte genau lesen: "...die laufende Woche eines Monats per shell-script ermitteln..." nicht die Kalenderwoche des laufenden Jahres ;-) Gruß, Michael -- ____ / / / / /__/ Michael Höhne / / / / / / mih-hoehne@web.de / ________________________________/ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Liste! Habe das folgende Beispiel versehentlich als PM an Ralf geschickt: --- snip --- #!/bin/bash D1=$(date -d 2009-09-01 +%V) # Die erste Woche vom September D2=$(date +%V) # Die Woche von heute LW=$(($D2-$D1+1)) # Die laufende Woche vom September echo "$LW" --- snip --- Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi K.! On Fr, 04 Sep 2009, K. Elo wrote:
--- snip --- #!/bin/bash D1=$(date -d 2009-09-01 +%V) # Die erste Woche vom September D2=$(date +%V) # Die Woche von heute LW=$(($D2-$D1+1)) # Die laufende Woche vom September echo "$LW" --- snip ---
Siehe meine Antwort an David. Mit freundlichen Grüßen Christian -- Dogs must have a permit signed by the mayor in order to congregate in groups of three or more on private property. [real standing law in Oklahoma, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Donnerstag, 3. September 2009 schrieb Karl Sinn: snip
sagt unter anderem: %U Wochennummer des Jahres mit Sonntag als erstem Tag der Woche (00..53)
scheint also irgendwie mit date zu gehen.
Es hat geklappt :-):
date '+%U' ja, "Wochennummer des _Jahres_", aber nicht die aktuelle WochenNr im laufenden Monat. Das gibt es nämlich nicht.
-- Mit freundlichen Grüßen Matthias Müller (Benutzer #439779 im Linux-Counter http://counter.li.org) PS: Bitte senden Sie als Antwort auf meine E-Mails reine Text-Nachrichten!
Hallo Ralf, Am Don, 03 Sep 2009, prengel schrieb:
wie kann ich die laufende Woche eines Monats per shell-script ermitteln. Für eine Backuplösung wollen wir wochenweise die Daten vorhalten. Konkert Januar 2009 hat die Wochen 1 bis 5 Februar 1 bis 4 März 1 bis 5 usw.
week_of_month() { eval echo '$[' $(date '+%W - $(date -d %Y/%m/01 "+%%W") +1') ']' } week_of_month HTH, -dnh -- +-------------------------------------------------------------------+ |-- SELF-ASSEMBLY MOEBIUS-STRIP - SEE OTHER SIDE FOR INSTRUCTIONS --| +-------------------------------------------------------------------+ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Fr, 04 Sep 2009, David Haller wrote:
week_of_month() { eval echo '$[' $(date '+%W - $(date -d %Y/%m/01 "+%%W") +1') ']' } week_of_month
#v+ chrisbra@t41:~$ week_of_month bash: 08: value too great for base (error token is "08") chrisbra@t41:~$ date Mo 23. Feb 00:00:43 CET 2009 #v- Ich sag ja, Shell und Datumsarithmetik ist eklig… Mit freundlichen Grüßen Christian -- Violators can be fined, arrested or jailed for making ugly faces at a dog. [real standing law in Oklahoma, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo! Nicht so schön und elegant, aber funzt: LW=$(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1)) Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi K.! On Fr, 04 Sep 2009, K. Elo wrote:
LW=$(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1))
Liest Du auch worauf Du antwortest? #v+ chrisbra@t41:~$ echo $(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1)) bash: 05-09: value too great for base (error token is "09") chrisbra@t41:~$ date Mo 23. Feb 00:00:24 CET 2009 #v- Ja, man kann das umgehen. Siehe dazu meinen Vorschlag. Und wenn Du das gefixt hast, dann habe ich noch ein ekliges Beispiel: #v+ chrisbra@t41:~$ echo $(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1)) 53 chrisbra@t41:~$ date Mo 4. Jan 00:00:16 CET 2010 #v- Mit freundlichen Grüßen Christian -- A special cleaning ordinance bans housewives from hiding dirt and dust under a rug in a dwelling. [real standing law in Pennsylvania, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo nochmals! Christian Brabandt schrieb:
Liest Du auch worauf Du antwortest?
Sorry, die Mails kamen heute mit etwas Verzögerung an, d.h. ich erhielt Deine Antwort erst nachdem ich meine schon losgeschickt hatte. [SNIP]
Ja, man kann das umgehen. Siehe dazu meinen Vorschlag. Und wenn Du das gefixt hast, dann habe ich noch ein ekliges Beispiel:
#v+ chrisbra@t41:~$ echo $(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1)) 53 chrisbra@t41:~$ date Mo 4. Jan 00:00:16 CET 2010 #v-
Eine Lösung wäre: [[ $(date -d `date +%Y-%m-01` +%V) -gt 52 ]] && echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) - 51 )) || echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) + 1 )) Dies ergibt für den 4. Januar 2010: ~> [[ $(date -d 2010-01-01 +%V) -gt 52 ]] && echo $(( $(date -d 2010-01-01 +%V) - $(date -d 2010-01-04 +%V) - 51 )) || echo $(( $(date -d 2010-01-01 +%V) - $(date -d 2010-01-04 +%V) + 1 )) 1 Und für heute: ~> [[ $(date -d `date +%Y-%m-01` +%V) -gt 52 ]] && echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) - 51 )) || echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) + 1 )) 1 Kann natürlich sein, dass ich auch hier etwas übersehen habe. Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi K.! On Fr, 04 Sep 2009, K. Elo wrote:
Christian Brabandt schrieb:
#v+ chrisbra@t41:~$ echo $(( $(date -d `date +%Y-%m-01` +%V)-$(date +%V)+1)) 53 chrisbra@t41:~$ date Mo 4. Jan 00:00:16 CET 2010 #v-
Eine Lösung wäre: [[ $(date -d `date +%Y-%m-01` +%V) -gt 52 ]] && echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) - 51 )) || echo $(( $(date -d `date +%Y-%m-01` +%V) - $(date +%V) + 1 ))
#v+ ~$ date --help |grep '%W' %W Wochennummer des Jahres mit Montag als erstem Tag der Woche (00..53) #v- ist einfacher ;)
Kann natürlich sein, dass ich auch hier etwas übersehen habe.
Das Problem ist, sowas läuft ein halbes Jahr klaglos und plötzlich knallt es. Und keiner weiß warum. Ich habe da meine Erfahrungen ;) Mit freundlichen Grüßen Christian -- Lawmakers made it obligatory for everybody to take at least one bath each week -- on Saturday night. [real standing law in Vermont, United States of America] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Fre, 04 Sep 2009, Christian Brabandt schrieb:
On Fr, 04 Sep 2009, David Haller wrote:
week_of_month() { eval echo '$[' $(date '+%W - $(date -d %Y/%m/01 "+%%W") +1') ']' } week_of_month
#v+ chrisbra@t41:~$ week_of_month bash: 08: value too great for base (error token is "08") chrisbra@t41:~$ date Mo 23. Feb 00:00:43 CET 2009 #v-
Ich sag ja, Shell und Datumsarithmetik ist eklig???
Was denn? Was kann denn ich dafür, daß du obiges nicht verstehst und das Problem daran selber lösen kannst? $ set -x $ eval echo '$[' $(date -d 2009/02/23 '+%-W - $(date -d %Y/%m/01 "+%%-W")' ) '+1 ]' ++ date -d 2009/02/23 '+%-W - $(date -d %Y/%m/01 "+%%-W")' + eval echo '$[' 8 - '$(date' -d 2009/02/01 '"+%-W")' '+1 ]' +++ date -d 2009/02/01 +%-W ++ echo 5 5 (geht auch mit '$((' ... '))' statt '$[' ']'.) Ergo: ==== week_of_month() { eval echo '$((' $(date '+%-W - $(date -d %Y/%m/01 "+%%-W")' ) '+1 ))' ; }; week_of_month Alternativ könnte man statt $[] bzw. $(( )) auch eine passende Eingabe für bc erzeugen, aber einen externen Prozess aufzurufen ist halt "teuer". HTH, -dnh --
[Netzwerkkarten] Wer jetzt errät, mit welchen das Ding läuft, bekommt eine Tulpe geschenkt... die teile [..] laufen in letzter zeit irgendwie ueberhaupt nicht mehr nett. muss da wohl mal mit frischer blumenerde rangehen. [>S. Posner und f. paulsen] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Mo, 07 Sep 2009, David Haller wrote:
#v+ chrisbra@t41:~$ week_of_month bash: 08: value too great for base (error token is "08") chrisbra@t41:~$ date Mo 23. Feb 00:00:43 CET 2009 #v-
Ich sag ja, Shell und Datumsarithmetik ist eklig???
Was denn? Was kann denn ich dafür, daß du obiges nicht verstehst und das Problem daran selber lösen kannst?
Laß mal gut sein, David. Ich hab Dir nichts getan und kann nichts dafür, wenn die Shell 08 als Oktalzahl interpretieren möchte. Ich hab nur auf den Fehler gezeigt.
(geht auch mit '$((' ... '))' statt '$[' ']'.)
Klar. $[ ist afaik auch deprecated.
Alternativ könnte man statt $[] bzw. $(( )) auch eine passende Eingabe für bc erzeugen, aber einen externen Prozess aufzurufen ist halt "teuer".
Ja. Mit freundlichen Grüßen Christian -- "Beware of bugs in the above code; I have only proved it correct, not tried it." -- Donald Knuth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (13)
-
Alex Winzer
-
Christian Brabandt
-
David Haller
-
Heinz Diehl
-
K. Elo
-
Karl Sinn
-
Martin Blank
-
Matthias Müller
-
Michael Höhne
-
Oliver Leue
-
prengel
-
Ralf Prengel
-
ralf.prengel@comline.de