为什么awk在系统调用后返回一个额外的行和“0”?

时间:2015-01-04 17:22:35

标签: macos bash shell awk

这个awk脚本使用系统调用将秒转换为时间码。为什么不使用内置函数呢?出于便携性的原因。这需要适用于OS X Mavericks(GNU bash,版本3.2.53,awk版本20070501),内置的strftime功能不可用(据我所知)。

cat file
A 3000
B 3010
C 3020

我的剧本:

awk '{ printf "%s %s\n", system( "date -r " $2 " -j +%H:%M:%S" ), $1 }' file

返回此

01:50:00
0 A
01:50:10
0 B
01:50:20
0 C

虽然我试图在与时间码相同的行上打印第一条记录的值,如下所示:

01:50:00 A
01:50:10 B
01:50:20 C

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用date命令打印$1的文字值,如下所示:

awk '{ system( "/bin/date -r " $2 " -j \"+%H:%M:%S " $1 "\"" ) }' file
19:50:00 A
19:50:10 B
19:50:20 C

或者在awk中使用getline

awk '{ cmd = "/bin/date -r " $2 " -j +%H:%M:%S"; 
        if (cmd | getline var) printf "%s %s\n", d, $1; close (cmd) }' file
19:50:00 A
19:50:10 B
19:50:20 C