我在命令行中运行以下命令:prog1 | prog2
上面的输出(比如X)是一个4位十六进制数,例如FA34。prog1
是一个java程序,它每100毫秒读取一次串行数据。prog2
是cut
命令,它可以删除我需要的部分。这样做很好,我可以在标准输出上每100毫秒看到所需的值。
我想要的:prog1 | prog2 | <convert X to decimal> | <multiply by 2>
如何在命令行中一次性使用管道或不使用管道?
注意:我编写了一个bash脚本来将X转换为十进制并乘以2。但是我不能把X作为一个参数直接输入到我的脚本中。
最佳答案
有一个有趣的可能性:
{ echo "iscale=16"; prog1 | prog2; } | sed 's/$/*2/' | bc
这首先发出回声(告诉
iscale=16
考虑用户在基数16中的输入)。然后bc
将sed
附加到每一行,所有这些都通过bc转换为十进制并乘以2。有一个限制:您的程序必须以大写形式输出所有十六进制数(例如,
*2
不prog2
)。如果这是一个限制,请使用:{ echo "iscale=16"; prog1 | prog2; } | sed 's/\(.*\)/\U\1*2/g' | bc
相反。