为什么 awk return 在系统调用后多了一行和“0”?
Why does awk return an extra line and "0" after system call?
此 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 " " -j +%H:%M:%S" ), }' 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
我做错了什么?
您可以只使用 date
命令打印 </code> 的文字值,如下所示:</p>
<pre><code>awk '{ system( "/bin/date -r " " -j \"+%H:%M:%S " "\"" ) }' file
19:50:00 A
19:50:10 B
19:50:20 C
否则在 awk 中使用 getline
:
awk '{ cmd = "/bin/date -r " " -j +%H:%M:%S";
if (cmd | getline var) printf "%s %s\n", d, ; close (cmd) }' file
19:50:00 A
19:50:10 B
19:50:20 C
此 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 " " -j +%H:%M:%S" ), }' 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
我做错了什么?
您可以只使用 date
命令打印 </code> 的文字值,如下所示:</p>
<pre><code>awk '{ system( "/bin/date -r " " -j \"+%H:%M:%S " "\"" ) }' file
19:50:00 A
19:50:10 B
19:50:20 C
否则在 awk 中使用 getline
:
awk '{ cmd = "/bin/date -r " " -j +%H:%M:%S";
if (cmd | getline var) printf "%s %s\n", d, ; close (cmd) }' file
19:50:00 A
19:50:10 B
19:50:20 C