免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2414 | 回复: 11

[文本处理] 有个文件需要shell处理,求高手指教 [复制链接]

论坛徽章:
0
发表于 2015-06-30 14:37 |显示全部楼层
我有下面一份文件linshi.txt:
backend aaa
        option  httpchk HEAD /hb.html HTTP/1.1\r\nHost:aaa.xxx
        balance leastconn
        server  b_www35 10.10.11.22:80 cookie www35 check port 80 inter 10s rise 2 fall 5 maxconn 150
        server  b_www41 10.10.11.33:80 cookie www41 check port 80 inter 10s rise 2 fall 5 maxconn 150
        server  b_www46 10.10.11.44:80 cookie www46 check port 80 inter 10s rise 2 fall 5 maxconn 150
backend bbb
        stats   admin   if      TRUE
        option  httpchk HEAD /hb.html HTTP/1.1\r\nHost:bbb.xxx
        option  log-health-checks
        balance leastconn
        fullconn        8192
        server  b_www47 10.10.22.33:80 cookie www47 check port 80 inter 10s rise 2 fall 5 maxconn 125
        server  b_www48 10.10.22.44:80 cookie www48 check port 80 inter 10s rise 2 fall 5 maxconn 125
backend ccc
        option  httpchk HEAD /hb.html HTTP/1.1\r\nHost:ccc.xxx
        balance leastconn
        server  b_recmd31 10.10.33.33:80 cookie recmd31 check port 80 inter 10s rise 2 fall 5 maxconn 100

我要将他重新排列,写入一个新的文件,格式如下:
aaa.xxx    leastconn         10.10.11.22    80  
                                      10.10.11.33    80
                                      10.10.11.44    80
bbb.xxx   leastconn          10.10.22.33    80
                                      10.10.22.44    80
ccc.xxx    leastconn          10.10.33.33    80

求高手指教,如何写这个shell

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-06-30 15:17 |显示全部楼层
回复 1# hwd0311cn
  1. awk -vRS="Host:" '{if($1~/xxx/){printf("%s leastconn ",$1);t=length($1)+11};h=0;for(i=2;i<NF;i++){if($i~/[0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+/){split($i,z,":");printf("%*s %s\n",(length(z[1])+t)*h,z[1],z[2]);h=1}}}' 213
  2. aaa.xxx leastconn 10.10.11.22 80
  3.                   10.10.11.33 80
  4.                   10.10.11.44 80
  5. bbb.xxx leastconn 10.10.22.33 80
  6.                   10.10.22.44 80
  7. ccc.xxx leastconn 10.10.33.33 80
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2015-06-30 15:17 |显示全部楼层
本帖最后由 jason680 于 2015-06-30 15:21 编辑

回复 1# hwd0311cn

What You Think Is What You Code(WYTIWYC)

backend aaa
        option  httpchk HEAD /hb.html HTTP/1.1\r\nHost:aaa.xxx
        balance leastconn
        server  b_www35 10.10.11.22:80 cookie www35 check port 80 inter 10s rise 2 fall 5 maxconn 150
        server  b_www41 10.10.11.33:80 cookie www41 check port 80 inter 10s rise 2 fall 5 maxconn 150
        server  b_www46 10.10.11.44:80 cookie www46 check port 80 inter 10s rise 2 fall 5 maxconn 150

$ awk 'match($0,/Host:([^ ]+)/,a){bk=a[1]}/^ *balance /{bl=$2}/^ *server /{OFS="\t";printf("%-10s %-12s %-20s\n",bk,bl,gensub(/:/," ",1,$3));bk=bl=""}' FILE
aaa.xxx    leastconn    10.10.11.22 80      
                        10.10.11.33 80      
                        10.10.11.44 80      
bbb.xxx    leastconn    10.10.22.33 80      
                        10.10.22.44 80      
ccc.xxx    leastconn    10.10.33.33 80   

论坛徽章:
0
发表于 2015-06-30 15:34 |显示全部楼层
谢谢,我好好研究下,提高自己

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
发表于 2015-06-30 15:43 |显示全部楼层
本帖最后由 stupid_lee 于 2015-06-30 16:36 编辑
  1. awk '/backend/{print a,b,c;a=$2".xxx";c=""}/balance/{b=$2}/server/{if(c=="")c=$3;else c=c"\n\t\t  "$3}END{print a,b,c}'  backend.txt
  2.   
  3. aaa.xxx leastconn 10.10.11.22:80
  4.                   10.10.11.33:80
  5.                   10.10.11.44:80
  6. bbb.xxx leastconn 10.10.22.33:80
  7.                   10.10.22.44:80
  8. ccc.xxx leastconn 10.10.33.33:80
复制代码
调整一下
  1. awk '/Host/{print a,b,c;split($0,e,":");a=e[2];c=""}/balance/{b=$2}/server/{if(c=="")c=$3;else c=c"\n\t\t  "$3}END{print a,b,c}'
复制代码

论坛徽章:
0
发表于 2015-06-30 15:56 |显示全部楼层
都是要根据文件取这个位置的关键字,不能写死

论坛徽章:
0
发表于 2015-06-30 16:39 |显示全部楼层
awk 'match($0,/Host[^ ]+)/,a){bk=a[1]}/^ *balance /{bl=$2}/^ *server /{OFS="\t";printf("%-10s %-12s %-20s\n",bk,bl,gensub(/:/," ",1,$3));bk=bl=""}' FILE
如果我想把backend aaa 这个aaa放入第一列应该怎么写

论坛徽章:
0
发表于 2015-06-30 16:52 |显示全部楼层
awk 'match($0,/Host[^ ]+)/,a){bk=a[1]}/^ *backend /{bh=$2}/^ *balance /{bl=$2}/^ *server /{OFS="\t";printf("%-10s %-12s %-20s\n",bh,bk,bl,gensub(/:/," ",1,$3));bh=bk=bl=","}' haproxy.txt >> ceshi55.txt

论坛徽章:
0
发表于 2015-06-30 16:53 |显示全部楼层
这么写Ip不显示,为啥

论坛徽章:
0
发表于 2015-06-30 17:02 |显示全部楼层
知道原因了, awk 'match($0,/Host[^ ]+)/,a){bk=a[1]}/^ *backend /{bh=$2}/^ *balance /{bl=$2}/^ *server /{OFS="\t";printf("%-10s %-12s %-20s %30s\n",bh,bk,bl,gensub(/:/," ",1,$3));bh=bk=bl=","}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP