我有一个文件,字段是20141028 20:49:49
的时间戳,我想得到小时20
,所以我使用system
命令:
hour=system("date -d\""$5"\" +'%H'")
时间戳是我文件中的第五个字段,因此我使用了$5
。但是当我执行程序时,我发现上面的命令只输出20
并返回0所以hour is 0 but not 20
,所以我的问题是如何获得时间戳中的小时?
我知道一种使用split
函数的方法,如下所示:
split($5, vec, " " )
split(vec[2], vec2, ":")
但这种方法效率低下且难看。
还有其他解决方案吗?感谢
答案 0 :(得分:4)
使用gawk
的另一种方式:
gawk 'match($5, " ([0-9]+):", r){print r[1]}' input_file
如果您想知道如何在awk
中管理外部流程输出:
awk '{cmd="date -d \""$5"\" +%H";cmd|getline hour;print hour;close(cmd)}' input_file
答案 1 :(得分:3)
您可以使用substr
功能在不使用system
命令的情况下提取小时。
例如:
awk {'print substr("20:49:49",1,2)}'
将产生输出
20
或更具体地说,问题
$ awk {'print substr("20141028 20:49:49",10,2)}'
20
substr(str, pos, len)
从位置str
的{{1}}和长度pos
中提取子字符串
如果len
的值为$5
,
20141028 20:49:49