如何删除临时文件的使用并从命令本身读取数据

时间:2016-06-06 20:18:25

标签: bash shell

我有一个shell脚本,我需要帮助才能提高效率。我正在使用临时文件来存储和读取数据,但我需要读取内存中的数据。

它使用命令从Postgres数据库收集指标并获取指标。我当前的脚本将度量标准提取到临时文件,然后从中读取。

我想停止使用临时文件并使用内存。 该脚本有效,我只需要帮助自动化更多内容并摆脱从临时文件中读取数据。

列出项目

INPUT=`mktemp`

#/usr/pgsql-9.5/bin/pgbench -c1 -j1 -t 1000 -S man > $INPUT

TESTTIME=15 #seconds
echo "Waiting $TESTTIME seconds..."
/usr/pgsql-9.5/bin/pgbench -c1 -j1 -T $TESTTIME -r man > $INPUT

OLDIFS=$IFS

IFS=" "

[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }

tps=`cat $INPUT |awk '/^tps/ {print $3}' |awk -F'.' '{print $1}' |head -n1` 
update_l=`cat $INPUT |awk '/UPDATE/ {print $1}' |tail -n1`
select_l=`cat $INPUT |awk '/SELECT/ {print $1}' |tail -n1`
insert_l=`cat $INPUT |awk '/INSERT/ {print $1}' |tail -n1`

echo ${PLOTTER_PREFIX}.tps $tps kv 
echo ${PLOTTER_PREFIX}.update_latency $update_l kv 
echo ${PLOTTER_PREFIX}.select_latency $select_l kv 
echo ${PLOTTER_PREFIX}.insert_latency $insert_l kv 


#{ while read line; do
# #    statsite_buildData ${PLOTTER_PREFIX}.latency average ${latency average} kv
#     echo ${PLOTTER_PREFIX}.${line} kv
#  done } < $INPUT

statsite_sendData
#echo $Test
IFS=$OLDIFS
rm -f $INPUT

1 个答案:

答案 0 :(得分:0)

您可以将命令的输出捕获到变量中,如下所示:

output=$(/usr/pgsql-9.5/bin/pgbench -c1 -j1 -T $TESTTIME -r man)

然后只使用echo代替cat,并使用变量名替换$INPUT

tps=`echo "$output" | awk '/^tps/ {print $3}' | awk -F'.' '{print $1}' |head -n1` 
update_l=`echo "$output" | awk '/UPDATE/ {print $1}' | tail -n1`
...

我还建议使用$()代替使用反引号的周围命令。所以上面会变成:

tps=$(echo "$output" | awk '/^tps/ {print $3}' | awk -F'.' '{print $1}' |head -n1) 
update_l=$(echo "$output" | awk '/UPDATE/ {print $1}' | tail -n1)
...