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

时间:2014-10-30 09:47:33

标签: awk

我有一个文件,字段是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, ":")

但这种方法效率低下且难看。

还有其他解决方案吗?感谢

2 个答案:

答案 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