免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助:shell 脚本实现每行插入特定行的0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-04 22:20 |只看该作者 |倒序浏览
本帖最后由 lin_sence 于 2016-06-04 22:21 编辑

请教各位大牛,我有一个文件,内容是别人通过脚本处理另外一个原始测试log得到的。这个文件的内容记录了原始测试log里面数据1所在的行数,如下所示,第一列就表示原始log里面1所在行数,如下,第一个1出现在423行,第二个1出现在430行,以此类推。
423 1
430 1
433 1
438 1
...   ...

每次测试的结果都不同,所以得到的这个文件里面,1的所在的行数都是不确定的,不过从上到下都是递增的。原始的测试log里面除了记录1就是记录0.
我想把这个文件恢复成如下:从出现的第一个1开始,后面的1之间都用0填充。上面的示例,就会恢复成如下:
423 1
424 0
425 0
426 0
427 0
428 0
429 0
430 1
431 0
432 0
433 1
434 0
435 0
436 0
437 0
438 1
...   ...
不知道通过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
2 [报告]
发表于 2016-06-04 22:52 |只看该作者
  1. awk 'a{while(++a<$1)print a,0}{a=$1}1'
复制代码

论坛徽章:
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
3 [报告]
发表于 2016-06-04 23:13 |只看该作者
本帖最后由 sunzhiguolu 于 2016-06-05 01:33 编辑
  1. perl -anle 'if(!$l){print;$l=$F[0];next}print "$l 0" until(++$l>=$F[0]);print "@F"' f
复制代码
423 1
424 0
425 0
426 0
427 0
428 0
429 0
430 1
431 0
432 0
433 1
434 0
435 0
436 0
437 0
438 1

论坛徽章:
0
4 [报告]
发表于 2016-06-04 23:14 |只看该作者
真的可以,太牛了!非常感谢!! 回复 2# haooooaaa


   

论坛徽章:
0
5 [报告]
发表于 2016-06-04 23:45 |只看该作者
我试了下,好像有语法错误,是我哪里没弄对吗?我的windows装了activeperl,图中那个src.log文件就是我的log文件

回复 3# sunzhiguolu


   

论坛徽章:
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
6 [报告]
发表于 2016-06-05 00:04 |只看该作者
回复 5# lin_sence


   

论坛徽章:
0
7 [报告]
发表于 2016-06-05 00:12 |只看该作者
perl 是之前有试过可以用的

回复 6# sunzhiguolu


   

论坛徽章:
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
8 [报告]
发表于 2016-06-05 00:17 |只看该作者
本帖最后由 sunzhiguolu 于 2016-06-05 01:37 编辑

回复 7# lin_sence
  1. Z:\>perl -anle "if(!$l){print;$l=$F[0];next}print qq($l 0) until(++$l>=$F[0]);print qq(@F)" f
复制代码
423 1
424 0
425 0
426 0
427 0
428 0
429 0
430 1
431 0
432 0
433 1
434 0
435 0
436 0
437 0
438 1
   

论坛徽章:
0
9 [报告]
发表于 2016-06-05 00:36 |只看该作者
可能是我环境的问题吧,还是不行的


看了下你的结果,428和430 之间少了一个429,430重复了一个...如果明天有时间帮忙再看下,先睡啦~谢谢你!论坛有这么多热心的牛人,好感激!
回复 8# sunzhiguolu


   

评分

参与人数 1信誉积分 +5 收起 理由
sunzhiguolu + 5 谢谢您的提醒, 非常感谢!!!

查看全部评分

论坛徽章:
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
10 [报告]
发表于 2016-06-05 01:40 |只看该作者
本帖最后由 sunzhiguolu 于 2016-06-05 01:47 编辑

回复 9# lin_sence
是我马虎了, 谢谢您的提醒, 很高兴能够为您帮上忙.   
if (!$l)   是小写的字母 L, 把所有的变量名换掉就好了. 再试下.

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP