免费注册 查看新帖 |

Chinaunix

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

求awk脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-24 10:51 |只看该作者 |倒序浏览
文件内容如下,如何在test这个域的最后增加一行类似web1一样的记录呢?通过awk应该怎么写?或者是其他的方法也行。

listen test 192.168.0.1:8098
    server web1 192.168.0.8:8091 weight 1 maxconn 5000 check

listen test2 192.168.0.10:8098
    server web4 192.168.0.15:8091 weight 1 maxconn 5000 check

论坛徽章:
0
2 [报告]
发表于 2010-04-24 11:10 |只看该作者
本帖最后由 lkk2003rty 于 2010-04-24 17:49 编辑

原来文件是什么样  要变成什么样 还请lz贴出来

论坛徽章:
0
3 [报告]
发表于 2010-04-24 11:12 |只看该作者
回复 1# dl318


    $ sed '/test/i\\

new line

-------------------------' example

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2010-04-24 12:24 |只看该作者
看不懂到底要增加在什么地方

论坛徽章:
0
5 [报告]
发表于 2010-04-24 17:27 |只看该作者
谢谢各位。
我贴的就是源文件,我要在
listen test 192.168.0.1:8098
    server web1 192.168.0.8:8091 weight 1 maxconn 5000 check
后面增加一条类似server web1 192.168.0.8:8091 weight 1 maxconn 5000 check
的记录。
整个文件是按照listen 这行的格式来分隔域的。

论坛徽章:
0
6 [报告]
发表于 2010-04-24 17:32 |只看该作者
比如增加一条记录
server web1 192.168.0.100:8091 weight 1 maxconn 5000 check

使文件变为
listen test 192.168.0.1:8098
    server web1 192.168.0.8:8091 weight 1 maxconn 5000 check
    server web1 192.168.0.100:8091 weight 1 maxconn 5000 check

论坛徽章:
0
7 [报告]
发表于 2010-04-24 17:54 |只看该作者
shield_spec_char()
{
        echo "$1" | sed 's/\//\\\//g' | sed 's/\./\\\./g' > /tmp/sed_temp
        if [ $? -ne 0 ]
        then
                return 1
        fi
        TEMP_CHAR=`cat /tmp/sed_temp`
        if [ $? -ne 0 ]
        then
                return 1
        fi

        if [ -z "$TEMP_CHAR" ]
        then
                return 1
        fi

        echo $TEMP_CHAR

        return 0
}

论坛徽章:
0
8 [报告]
发表于 2010-04-24 18:06 |只看该作者
楼上能解释一下吗?我的意思是增加一条记录。

论坛徽章:
0
9 [报告]
发表于 2010-04-24 18:12 |只看该作者
源文件:
listen test 192.168.0.10:8888
        balance roundrobin
        option forwardfor
#       option ssl-hello-chk

        server web1 192.168.0.100:8091 weight 1 maxconn 5000 check
        server web1 192.168.0.101:8091 weight 1 maxconn 5000 check
                                             
listen  test2 192.168.0.9:8080
        balance roundrobin                                            
        option  forwardfor                                                
        option  ssl-hello-chk                                          
                                                
        server  web1 192.168.0.150:9090 weight 1 maxconn 5000 CHECK

需要动态增加记录,通过输入参数,指定输入到test 或者是test2段,不如在test段增加一条记录,192.168.0.90:8091
最后是文件变为:
listen test 192.168.0.10:8888
        balance roundrobin
        option forwardfor
#       option ssl-hello-chk

        server web1 192.168.0.100:8091 weight 1 maxconn 5000 check
        server web1 192.168.0.101:8091 weight 1 maxconn 5000 check
        server web1 192.168.0.90:8091 weight 1 maxconn 5000 check                     
listen  test2 192.168.0.9:8080
        balance roundrobin                                            
        option  forwardfor                                                
        option  ssl-hello-chk                                          
                                                
        server  web1 192.168.0.150:9090 weight 1 maxconn 5000 CHECK

论坛徽章:
0
10 [报告]
发表于 2010-04-24 22:20 |只看该作者

  1. awk -v RS='listen' -F '\n' -v OFS='\n' -v a='192.168.0.90:8091' -v b='test' 'NR>1{if($0~b"\\>"){$NF="\tserver web1 "a" weight 1 maxconn 5000 check"}print "listen" $0}' 数据文件

  2. 解释:
  3. 用listen作为行分隔符来分隔文件
  4. 以换行符作为字段分隔符
  5. -v a='192.168.0.90:8091' 设定第一个参数
  6. -v b='test' 设定需要在哪个信息块中修改数据

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP