我正在运行以下命令将时间戳附加到数据:
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(); }'
答案 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;