我正在从终端运行此命令。
adb shell top -m 5 -d 01.00 |
grep --line-buffered 'com.android.calculator2' > '/writeTestData.txt'
它可以在文本文件中连续输出过程信息
我想将这些数据同时保存到Redis
。
怎么办?任何帮助将不胜感激。
答案 0 :(得分:0)
我不知道Redis
是什么,但有时你可以将输出传递给tee
,它可以将它重定向到多个读者。考虑这个例子:
echo -e 'aaa\nccc\nbbb\naaa\nbbb' | \
tee >(grep "aaa" | wc -l) >(grep "ccc" | wc -l) > /dev/null
仅需要重定向到/ dev / null,因为tee还会将输出复制到stdout
。
答案 1 :(得分:0)
我认为以下命令可以解决您的问题。
adb shell top -m 5 -d 01.00 | grep --line-buffered 'com.android.calculator2' \
| tee writeTestData.txt | xargs -I {} redis-cli -p 6379 set key {}
如你所见,Rambo Ramon的解决方案(tee)是关键。基本上,在这种情况下,使用tee将输入(来自adb命令)发送到两个不同的输出:第一个是.txt文件,第二个是管道命令的输入。
xargs逐行获取tee的输出,并将其作为参数发送到redis-cli工具的set命令。
6379是Redis的默认端口,您可以根据运行的服务器端口进行更改。
set key {}基本上在Redis中存储来自tee的输出,通过xargs,在名为“key”的键上。因此,只需一个密钥,它就会存储每次来自xargs的最新值。
如果要将内容存储在同一个键(追加)中,可以使用与设置语法相同的append命令。所以你用append替换set,这是上面命令中唯一的变化。
我已经使用类似的命令测试了你需要的那个(提供连续输出)并且它工作正常:
测试命令:
top | grep --line-buffered Cpu | tee file.txt | xargs -I {} redis-cli -p \
6900 set key {}