dateコマンド以外にも、awkには時刻変換に役立つ以下の組み込み関数があります。

systime()

現在時刻をエポック(1970-01-01 00:00:00)からの秒数で返します。

1
2
3
4
$ awk 'BEGIN {
   print "Number of seconds since the Epoch = " systime()
}'
Number of seconds since the Epoch = 1511480989

mktime(YYYY MM DD HH MM SS)

日付文字列 “YYYY MM DD HH MM SS” をエポックからの秒数に変換します。systimeと同じ形式の出力です。

1
2
3
4
$ awk 'BEGIN {
   print "Number of seconds since the Epoch = " mktime("2017 11 24 08 52 10")
}'
Number of seconds since the Epoch = 1511481130

strftime()

指定したフォーマットでタイムスタンプを整形します。

1
2
3
4
$ awk 'BEGIN {
   print strftime("Time = %m/%d/%Y %H:%M:%S", systime())
}'
Time = 11/24/2017 08:54:15

AWKでサポートされている時刻フォーマットは以下の通りです:

  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
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
%a
ロケールの省略形の曜日名

%A
ロケールの完全な曜日名

%b
ロケールの省略形の月名

%B
ロケールの完全な月名

%c
ロケールの「適切な」日付と時刻表現("C"ロケールでは 'A %B %d %T %Y'

%C
現在の年の世紀部分(年を100で割って切り捨て)

d
月の日(0131

%D
'%m/%d/%y' と同等

%e
1桁の場合はスペースで埋めた月の日

%F
'%Y-%m-%d' と同等(ISO 8601日付形式)

%g
ISO 8601週番号の下2桁の年(0099

%G
ISO週番号の完全な年

%h
'%b' と同等

%H
時(24時間表記、0023

%I
時(12時間表記、0112

%j
年内通算日(001366

%m
月(0112

%M
分(0059

%n
改行文字(ASCII LF

%p
ロケールのAM/PM表記

%r
ロケールの12時間表記時刻("C"ロケールでは 'I:%M:%S %p'

%R
'%H:%M' と同等

%S
秒(0060

%t
TAB文字

%T
'%H:%M:%S' と同等

%u
曜日(17、月曜=1

%U
年の週番号(最初の日曜が週10053

%V
年の週番号(最初の月曜が週10153ISO 8601方式)

%w
曜日(06、日曜=0

%W
年の週番号(最初の月曜が週10053

%x
ロケールの「適切な」日付表現("C"ロケールでは 'A %B %d %Y'

%X
ロケールの「適切な」時刻表現("C"ロケールでは 'T'

%y
年の下2桁(0099

%Y
完全な年(例:2015

%z
タイムゾーンオフセット('+HHMM'形式、例:RFC 822/1036ヘッダ用)

%Z
タイムゾーン名または略称

%Ec %EC %Ex %EX %Ey %EY %Od %Oe %OH
%OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy
"代替表現"

%%
リテラルの'%'

参照: The GNU Awk User’s Guide: Time Functions AWK - Time Functions