Bash:将redis-benchmark结果存储为var生成奇怪的字符串

时间:2016-04-07 09:20:17

标签: linux bash shell command

我尝试在shell脚本中解析redis-benchmark结果,我编写脚本但无法执行。

环境

$ bash --version
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
$ cat /etc/issue
Ubuntu 12.04 LTS \n \l
$ dpkg -l |grep redis
2:2.8.19-rwky1~precise
$ cat demo.sh
OUTPUT=`redis-benchmark -n 1000 -r 100000 -d 32 -c 30 -t GET -p 6379 -q |grep 'per second'`
R=$(echo "$OUTPUT" | cut -f 1 -d'.')
S=$(echo $R | awk '{print $2}')
echo $S

Shell调试显示一些混淆信息。

$ bash -x demo.sh
++ redis-benchmark -n 1000 -r 100000 -d 32 -c 30 -t GET -p 6379 -q
++ grep 'per second'
GET: 166666.67 requests per second'
GET: 166666.67 requests per second'
++ cut -f 1 -d.
GET: 166666'an
++ echo GET: $'-nan\rGET:' 166666
++ awk '{print $2}'
+ S=$'-nan\rGET:'
+ echo $'-nan\rGET:'
GET:

我错过了什么吗?

评论

看起来由于redis-benchmark结果很奇怪,不知道为什么

$ redis-benchmark -n 1000 -r 100000 -d 32 -c 30 -t GET -p 6379 -q |grep per > todo
$ vim todo 
GET: -nan^MGET: 166666.67 requests per second

1 个答案:

答案 0 :(得分:0)

如果您无法修复 redis-benchmark 输出,这将解析正确和奇怪的格式:

redis-benchmark -n 1000 -r 100000 -d 32 -c 30 -t GET -p 6379 -q | grep 'per second' | sed 's/.*GET: \(.*\) requests .*/\1/'

但你应该修改输入:D