将bash数据保存到Redis

时间:2015-09-17 11:51:59

标签: linux bash redis

我正在从终端运行此命令。

adb shell top -m 5 -d 01.00 | 
     grep --line-buffered 'com.android.calculator2' > '/writeTestData.txt'

它可以在文本文件中连续输出过程信息 我想将这些数据同时保存到Redis

怎么办?任何帮助将不胜感激。

2 个答案:

答案 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 {}