2017-05-27 19 views
0

awkを使って、日付(yyyy-mm-dd)を週と四半期(月曜日に設定された週の最初の曜日)に変換する方法は?awkを使って、日付を週と四半期に変換するには?

入力:

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

募集出力:

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

あなたは何をしようとしたのですか?私はそれに 'date'を使用したいと思います(ISO週、日曜日/月曜日の開始週など)。 –

+0

@ JamesBrown読み取り中f1 f2 f3; do-echo $ f1;を実行します。 echo -n "";エコー-n $ f2; echo -n "";日付-d $ f2 +%V; done <入力 ....しかし引用符を正しく取得していないし、awkを使用していない...:p – Markus

+2

@マークスはコメントの代わりに質問しようとしたコードを追加します...デリミタを指定するにはhttp://mywiki.wooledge.org/BashFAQ/001を参照してください。 – Sundeep

答えて

3

awkのソリューション:

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 

出力:

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,"-") - セパレータ-

  • mktime(datespec)によって第2フィールド(date)を分割 - スタンプ

  • strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"))datespec(日付指定)をオン - フォーマットmktime()によって返された時間は0123に従って機能します(年間の週数)

  • q = int((d[2]+2)/3)から四半期数を計算します。四半期は月に相当します。だから私は除数として3を使用します。

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

+1

@EdMorton、はい、私の "ビジョン領域" – RomanPerekhrest

関連する問題