更改连续的 ascii 数据流(例如,随时间修改)



我有一个声级计,在伟大的sigrok-cli的帮助下,它通过命令行吐出它的读数:

# sigrok-cli --driver cem-dt-885x:conn=/dev/ttyUSB1
--output-format analog --continuous |cut -c 6-12
42.7000
42.5999
42.7000
42.5999
42.5000
(...)

我想用一些额外的东西"修改"这个连续的数据流,最重要的是读取时间

,如下所示:
20140111-190800 42.7000
20140111-190800 42.5999
20140111-190801 42.7000
20140111-190801 42.5999
20140111-190802 42.5000
(...)

到目前为止我已经尝试过

# sigrok-cli --driver cem-dt-885x:conn=/dev/ttyUSB1
 --output-format analog --continuous |cut -c 6-12|
 (while read r ; do echo "$(date +%Y%M%d-%H%M%S) $r"; done)

但是这 a) 仅在按 Ctrl-c 后输出数据,并且 b) 不会更改时间(即它始终显示我启动命令的时间)。

在第二步中,我想将值四舍五入到小数点后仅一位数,但这主要是为了美化输出(但可以"在我们使用它时"完成,即,而输出无论如何都以某种方式处理:

20140111-190800 42.7
20140111-190800 42.6
20140111-190801 42.7
20140111-190801 42.6
20140111-190802 42.5
(...)

一如既往,非常感谢任何帮助,指针等。

编辑 1我从@AmokHuginnsson的代码中得到的输出:

(...)
43.70 19:58:33
43.50 19:58:33
43.30 19:58:33
43.10 19:58:33
43.00 19:58:33
42.80 19:58:33
42.70 19:58:33
42.50 19:58:34
42.30 19:58:34
42.20 19:58:34
42.10 19:58:34
41.90 19:58:34
41.80 19:58:34
(...)

你的问题有两个部分,首先你必须在输出数据的程序上禁用缓冲,其次你可以使用更复杂的东西来转换你的数据,即

stdbuf -o 0 ./a.out | perl -nl -e 'use POSIX; printf ( "%s %.2fn", strftime( "%Y%m%d-%H%M%S", localtime ), $_ )'

其中./a.out是每行输出一个浮点数的程序。我没有你的程序,所以我写了一些东西来测试它:

[amok@vegeta](2/1)~/$ cat tick.cxx
#include <iostream>
#include <cstdlib>
#include <unistd.h>
using namespace std;
int main( int, char** ) {
        srand( time( NULL ) );
        while ( true ) {
                int d( rand() );
                d || ( d = 1 );
                cout << static_cast<double>( rand() ) / d << "n";
                sleep( 1 );
        }
        return ( 0 );
}

顺便说一句,stdbuf 是 GNU Coreutils 的一部分,它也可以在 FreeBSD 上使用。您也可以使用作为期望包一部分的取消缓冲程序,即

unbuffer ./a.out | perl -nl -e 'use POSIX; printf ( "%s %.2fn", strftime( "%Y%m%d-%H%M%S",` localtime ), $_ )

根据要求解释perl部分。

OP可能感兴趣的两个部分。

首先是行格式"%.2f %sn",它是标准的 C printf() 样式格式字符串,第二个是时间格式,时间格式与C strftime()调用中的格式相同。只需记住对 printf 参数进行排序以反映特定格式项的顺序。

man 3 printfman 3 strftime是关于这两个函数的良好参考。

相关内容

  • 没有找到相关文章

最新更新