我有一个文件,一个字段是一个时间戳,比如20141028 20:49:49,我想获取小时20,所以我使用system命令:
hour=system("date -d\""$5"\" +'%H'")
Run Code Online (Sandbox Code Playgroud)
时间戳是我文件中的第五个字段,所以我使用了$5. 但是当我执行程序时,我发现上面的命令只是输出20并返回 0 所以hour is 0 but not 20,所以我的问题是如何获取时间戳中的小时?
split我知道一种使用函数两次的方法,如下所示:
split($5, vec, " " )
split(vec[2], vec2, ":")
Run Code Online (Sandbox Code Playgroud)
但这种方法有点低效而且丑陋。
那么还有其他解决方案吗?谢谢
另一种使用方法gawk:
gawk 'match($5, " ([0-9]+):", r){print r[1]}' input_file
Run Code Online (Sandbox Code Playgroud)
如果您想知道如何管理外部流程输出awk:
awk '{cmd="date -d \""$5"\" +%H";cmd|getline hour;print hour;close(cmd)}' input_file
Run Code Online (Sandbox Code Playgroud)