禁止在awk中显示系统功能的退出状态

时间:2017-02-13 23:42:55

标签: bash awk

我正在运行以下命令将时间戳附加到数据:

cat /dev/cu.usbmodem1421 | gawk '{printf "%s,%s\n",system("gdate +%s"),$0; fflush(); }'

然而,它还会打印系统功能的退出状态:

1487029247
0,332
1487029247
0,332
1487029247
0,332
1487029247
0,332
1487029247
0,332
1487029248
0,332
1487029248
0,331
1487029248

如何隐藏退出状态?

用于测试的简单bash脚本:

#!/bin/bash
for i in $(seq 50)
do
    echo "Welcome $i times"
    sleep 1
done

要测试新脚本,请运行:

./script.sh | gawk '{printf "%s,%s\n",system("gdate +%s"),$0; fflush(); }'

3 个答案:

答案 0 :(得分:1)

system返回由printf打印的rc代码。你最好试试

system("gdate +%s"); print($0)`

如果您在gdate输出后不喜欢换行符,请阅读:https://www.gnu.org/software/gawk/manual/html_node/Getline_002fVariable_002fPipe.html#Getline_002fVariable_002fPipe

答案 1 :(得分:1)

要包含带有其他awk输出的shell命令的输出将是:

awk -v OFS=',' 'BEGIN{cmd="gdate +%s"} (cmd | getline line) > 0{print line, $0; close(cmd)}' /dev/cu.usbmodem1421

以上假设gdate +%s执行您想要的任何操作。有关如何/何时使用getline,请参阅http://awk.freeshell.org/AllAboutGetline

答案 2 :(得分:1)

我遇到了同样的问题,但找不到足够简单的解决方案。我发现将系统调用包装在格式化打印中解决了我的问题。这依赖于系统调用的自动打印。所以使用前先测试一下。

对于您的示例,您还必须处理按日期打印的换行符。我发现系统调用中的下游字符串操作的重现性不太好,所以我求助于使用 bash printf 删除该换行符。

vacuum temp_test;