免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2457 | 回复: 4
打印 上一主题 下一主题

awk 或者sed处理server_list = array (serv_1,2,3,serv_4,5,8,9)中的编号问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-19 01:25 |只看该作者 |倒序浏览
文件com.config中有下面的这一行:
server_list = array (serv_1,2,3,serv_4,5,8,9);

备注:括号中逗号分隔的如1,2,3,serv_4等代表server的编号
=====================================
现在有如下需求:
如果我增加了一台server,server的编号为7,那么com.config文件中的"server_list = array (serv_1,2,3,serv_4,5,8,9);"这一行会变成
"server_list = array (serv_1,2,3,serv_4,5,7,8,9);"
如果我增加了一台server,server的编号为serv_6,那么com.config文件中的"server_list = array (serv_1,2,3,serv_4,5,8,9);"这一行会变成
"server_list = array (serv_1,2,3,serv_4,5,serv_6,8,9);"
如果加入的编号原来有则不变,注意编号顺序!
======================================
谢谢!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-09-19 02:38 |只看该作者
回复 1# lionfun


    try:
  1. echo 'server_list = array (serv_1,2,3,serv_4,5,8,9);' |\
  2. awk -v S="7" -F, '{for(i=1;i<NF;i++)if(gensub("serv_","","g",S)<T=gensub(/.*\(|serv_/,"","g",$i)){sub(T,S","T,$i);break}}1' OFS=,
  3. server_list = array (serv_1,2,3,serv_4,5,7,8,9);

  4. echo 'server_list = array (serv_1,2,3,serv_4,5,8,9);' |\
  5. awk -v S="serv_6" -F, '{for(i=1;i<NF;i++)if(gensub("serv_","","g",S)<T=gensub(/.*\(|serv_/,"","g",$i)){sub(T,S","T,$i);break}}1' OFS=,
  6. server_list = array (serv_1,2,3,serv_4,5,serv_6,8,9);
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-09-19 08:40 |只看该作者
回复 2# yinyuemi


    谢谢 SS
   如果我还需要传入 S="10" 或者 S="serv_10" 就会变成:"server_list = array (serv_1,2,3,serv_4,5,8,9,10);"或者"server_list = array (serv_1,2,3,serv_4,5,8,9,serv_10);"
   如果如果传入S="4" 就原有的"server_list = array (serv_1,2,3,serv_4,5,8,9);"会变成"server_list = array (serv_1,2,3,4,5,8,9);"
   如果我传入S="serv_2" 原有的"server_list = array (serv_1,2,3,serv_4,5,8,9);"就会变成"server_list = array (serv_1,serv_2,3,serv_4,5,8,9);"
   
   那应该怎么实现?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-09-19 10:04 |只看该作者
回复 3# lionfun

try:
  1. echo 'server_list = array (serv_1,2,3,serv_4,5,8,9);' |awk -v M=0 -v S="serv_2" -F, '{for(i=1;i<NF;i++)if((gensub("serv_","","g",S)+0)<T=(gensub(/.*\(|serv_/,"","g",$i)+0)){M=1;I=i;break}else{if(gensub("serv_","","g",S)==T=gensub(/.*\(|serv_/,"","g",$i)){M=2;I=i;break}}}{if(M==1){sub(T,S","T,$I)}else{if(M==2){$I=S}else{sub(")",","S"&",$NF)}}}1' OFS=,
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-09-19 10:17 |只看该作者
回复 4# yinyuemi


    SS 可以! 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP