如何定义shell函数
需求:如何从以下公式中提取到(COUNTER1、COUNTER2、COUNTER3以及+、-)这些变量?BSSAPPERF.MSORIGCMSRVCREQ+SYSISUP...
需求:如何从以下公式中提取到(COUNTER1、COUNTER2、COUNTER3以及+、-)这些变量?
BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
结果:
COUNTER1=BSSAPPERF.MSORIGCMSRVCREQ
COUNTER2=SYSISUPDPCPERF.ISUPPFMIAMRX
COUNTER3=CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
FUHAO1=+
FUHAO2=-
我听说可以自己定义一个函数,但因为本人刚刚接触shell编程,不知道如何开始编写,所以希望在这里有高人指导,不胜感激。
我是想在Unix系统中用shell脚本实现以上功能(用awk、sed......等工具)
以下公式是个变量,里面的符号有可能会变,这样就会导致分析错误,不过还是要感谢这位仁兄;
BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND 展开
BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
结果:
COUNTER1=BSSAPPERF.MSORIGCMSRVCREQ
COUNTER2=SYSISUPDPCPERF.ISUPPFMIAMRX
COUNTER3=CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
FUHAO1=+
FUHAO2=-
我听说可以自己定义一个函数,但因为本人刚刚接触shell编程,不知道如何开始编写,所以希望在这里有高人指导,不胜感激。
我是想在Unix系统中用shell脚本实现以上功能(用awk、sed......等工具)
以下公式是个变量,里面的符号有可能会变,这样就会导致分析错误,不过还是要感谢这位仁兄;
BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND 展开
2个回答
展开全部
# 第一步,在shell里,我们必需先把input的string变成都用
# 同一个field delimiter,这样好便於我们把每一个field分开
# 所以下面是把所有的符号(+,-)变成单一空格:
# (1)先定义 input 的内容:
input="BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND"
# (2)用 sed 把所有的加号、减号都变成单一空格
# 把执行的结果存到 input2 裏面:
input2=$(echo ${input} | sed -e "s/+/ /g" -e "s/-/ /g")
#(3)利用下面的指令来打印出每一个 COUNTERx :
let n=1
for i in $input2
do
echo "COUNTER${n}=$i"
let n=n+1
done
# 结果是:
# COUNTER1=BSSAPPERF.MSORIGCMSRVCREQ
# COUNTER2=SYSISUPDPCPERF.ISUPPFMIAMRX
# COUNTER3=CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
#(4)把所有的英文字母都变成空白
# 也把点(.)也变成空白
# 用 tr 指令把连续空白变成单一空白
# 把output存在 input3 裏面:
input3=$(echo $input | sed "s/[A-Z\.]/ /g" | tr -s " ")
# 结果:
# echo $input3
# + -
#(5)利用下面的指令来打印每一个 FUHAOx :
let n=1
for i in $input3
do
echo "FUHAO${n}=$i"
let n=n+1
done
# 结果是:
# FUHAO1=+
# FUHAO2=-
这样清楚了吗?谢谢!
# 同一个field delimiter,这样好便於我们把每一个field分开
# 所以下面是把所有的符号(+,-)变成单一空格:
# (1)先定义 input 的内容:
input="BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND"
# (2)用 sed 把所有的加号、减号都变成单一空格
# 把执行的结果存到 input2 裏面:
input2=$(echo ${input} | sed -e "s/+/ /g" -e "s/-/ /g")
#(3)利用下面的指令来打印出每一个 COUNTERx :
let n=1
for i in $input2
do
echo "COUNTER${n}=$i"
let n=n+1
done
# 结果是:
# COUNTER1=BSSAPPERF.MSORIGCMSRVCREQ
# COUNTER2=SYSISUPDPCPERF.ISUPPFMIAMRX
# COUNTER3=CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND
#(4)把所有的英文字母都变成空白
# 也把点(.)也变成空白
# 用 tr 指令把连续空白变成单一空白
# 把output存在 input3 裏面:
input3=$(echo $input | sed "s/[A-Z\.]/ /g" | tr -s " ")
# 结果:
# echo $input3
# + -
#(5)利用下面的指令来打印每一个 FUHAOx :
let n=1
for i in $input3
do
echo "FUHAO${n}=$i"
let n=n+1
done
# 结果是:
# FUHAO1=+
# FUHAO2=-
这样清楚了吗?谢谢!
展开全部
大致是这么个意思,你自己根据需要优化吧:
temp=`echo "BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND" | sed -r 'r/[+-]/ /g'`
COUNTER1=echo $temp|awk '{print $1}'
COUNTER2=echo $temp|awk '{print $2}'
COUNTER3=echo $temp|awk '{print $3}'
FUHAO1=+
FUHAO2=-
temp=`echo "BSSAPPERF.MSORIGCMSRVCREQ+SYSISUPDPCPERF.ISUPPFMIAMRX-CALLTOTALTIMEPERF.TOTALCALLTIMEMOBILETOLAND" | sed -r 'r/[+-]/ /g'`
COUNTER1=echo $temp|awk '{print $1}'
COUNTER2=echo $temp|awk '{print $2}'
COUNTER3=echo $temp|awk '{print $3}'
FUHAO1=+
FUHAO2=-
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询