免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2010 | 回复: 9

[文本处理] 用awk和sed都没有搞定的一个问题,求教 [复制链接]

论坛徽章:
0
发表于 2016-07-21 22:59 |显示全部楼层
<scenario tps='1014' MaxNumOfMsg='84500' low3='0' low4='0' low5='0' low6='0' low7='0' low8='1' saveSeq='0'>
          <message msgFile='../diamsg/mar_lte_5013.msg.raw'/>
</scenario>

<scenario tps='1014' MaxNumOfMsg='84500' low3='5' low4='4' low5='8' low6='0' low7='0' low8='1' saveSeq='0'>
            <message msgFile='../diamsg/mar3_rat2000_swx_vzw_lte.msg.raw'/>
</scenario>

要处理的文本如上,目标是将tps的值和MaxNumOfMsg的值都替换成他们的2%大小的值,用sed替换没搞定,想用awk吧
想用大概类似于下面的一个函数,在调试过程中就发现FS设置成 ' 的话各种不对报错,不知道如何能避免
function generate {
gawk '
BEGIN{FS=OFS="'"}
$0 ~ /MaxNumOfMsg/  {print $2,$4; }
$0 !~ /MaxNumOfMsg/ { print $0; }
'
}

该问题求解,多谢了

论坛徽章:
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
发表于 2016-07-21 23:11 |显示全部楼层
回复 1# venustef

$ awk -vq="'" 'function ch(k,m){s=k"="q"([0-9]+)"q;if(match($0,s,a))sub(s,k"="q a[1]*m q)}{ch("tps",0.02);ch("MaxNumOfMsg",0.02)}1' FILE
<scenario tps='20.28' MaxNumOfMsg='1690' low3='0' low4='0' low5='0' low6='0' low7='0' low8='1' saveSeq='0'>
          <message msgFile='../diamsg/mar_lte_5013.msg.raw'/>
</scenario>

<scenario tps='20.28' MaxNumOfMsg='1690' low3='5' low4='4' low5='8' low6='0' low7='0' low8='1' saveSeq='0'>
            <message msgFile='../diamsg/mar3_rat2000_swx_vzw_lte.msg.raw'/>
</scenario>

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-07-21 23:49 |显示全部楼层
  1. perl -pe 'BEGIN{$b=chr(0x27)}{s/(tps=$b)(\d+)($b MaxNumOfMsg=$b)(\d+)/$1.$2*.02.$3.$4*.02/e;}' f
复制代码
<scenario tps='20.28' MaxNumOfMsg='1690' low3='0' low4='0' low5='0' low6='0' low7='0' low8='1' saveSeq='0'>
          <message msgFile='../diamsg/mar_lte_5013.msg.raw'/>
</scenario>

<scenario tps='20.28' MaxNumOfMsg='1690' low3='5' low4='4' low5='8' low6='0' low7='0' low8='1' saveSeq='0'>
            <message msgFile='../diamsg/mar3_rat2000_swx_vzw_lte.msg.raw'/>
</scenario>

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-07-22 00:21 |显示全部楼层
cat aa|perl -npe 's/([sg]=.)(\d+)/$1.($2*0.02)/eg'

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-07-22 00:29 |显示全部楼层
向您老人家学习, 用的太巧了!!!

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
发表于 2016-07-22 10:28 |显示全部楼层
本帖最后由 ll104567 于 2016-07-22 10:29 编辑

awk 'BEGIN{FS="\047";OFS="\047"}/tps/{$2=$2*0.02}/MaxNumOfMsg/{$4=$4*0.02}1'

顺便摸一下楼上pp

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
发表于 2016-07-22 10:29 |显示全部楼层
我的有点取巧了- -、我看文本有规律就没忍住= =

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2016-07-22 17:17 |显示全部楼层
  1. awk -F\' '/tps=/{$2=$2*0.02;$4=$4*0.02}{print}' file
复制代码

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
发表于 2016-07-23 00:03 |显示全部楼层
awk -F"='|' "  '$0 ~/scenario tps/{$2=$2/50;$4=$4/50}{print $0}' file

论坛徽章:
0
发表于 2016-07-29 09:01 |显示全部楼层
回复 6# ll104567


    多谢了,这个有点没看懂,后面加个1是什么用法啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP