2017-05-27 2 views
0

Mit awk, wie Daten (JJJJ-MM-TT) in Woche und Quartal (erster Tag der Woche auf Montag) konvertiert werden?Mit awk, wie Daten in Woche und Quartal zu konvertieren?

Input:

a;2016-04-25;10 
b;2016-07-25;20 
c;2016-10-25;30 
d;2017-02-25;40 

gewünschter Ausgang:

a;2016-04-25;10;2016-w17;2016-q2 
b;2016-07-25;20;2016-w30;2016-q3 
c;2016-10-25;30;2016-w43;2016-q4 
d;2017-02-25;40;2017-w8;2017-q1 
+0

Was haben Sie versucht? Ich würde "Datum" dafür verwenden (ISO Woche, Sonntag/Montag Woche usw.). –

+0

@JamesBrown beim Lesen f1 f2 f3; tue echo -n $ f1; echo -n ""; echo -n $ f2; echo -n ""; date -d $ f2 +% V; done Markus

+2

@Markus fügen Sie den Code, den Sie in Frage zu stellen, anstatt Kommentare ... und siehe http://mywiki.wooledge.org/BashFAQ/001 zur Angabe von Trennzeichen – Sundeep

Antwort

3

awk Lösung:

awk -F';' '{ split($2,d,"-"); w = strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00")); 
      q = int((d[2]+2)/3); 
      print $0,d[1]"-w"w,d[1]"-q"q}' OFS=';' file 

Der Ausgang:

01.235.
a;2016-04-25;10;2016-w17;2016-q2 
b;2016-07-25;20;2016-w30;2016-q3 
c;2016-10-25;30;2016-w43;2016-q4 
d;2017-02-25;40;2017-w08;2017-q1 

  • split($2,d,"-") - split 2. Feld (date) durch Separator -

  • mktime(datespec) - TURN datespec (Datumsangabe) in einen Zeitstempel

  • strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00")) - Formatieren der Zeit zurückgegeben von mktime() Funktion nach %W (die Wochennummer des Jahres)

  • q = int((d[2]+2)/3) - Berechnung der Quartal Nummer. Das Viertel entspricht Monaten. Also werden wir 3 als Teiler verwenden.

https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

+1

@EdMorton, ja, habe gerade das aus meinem "Sichtbereich" verpasst – RomanPerekhrest

Verwandte Themen