如何在awk中获取'system'命令的输出

nin*_*hut 3 awk

我有一个文件,一个字段是一个时间戳,比如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)

但这种方法有点低效而且丑陋。

那么还有其他解决方案吗?谢谢

Jua*_*doy 5

另一种使用方法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)