免费注册 查看新帖 |

Chinaunix

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

请教一个替换文本文件中指定位置的值的perl的写法! [复制链接]

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-22 13:21 |显示全部楼层 |倒序浏览
请教一个perl的写法!谢谢!
将input.txt文件中的第2byte的值设定到第11byte,输出output.txt

处理对象文件内容
$cat input.txt
1F 123456 T qqqqq zzz              
2G 7测012 T qqqqq zzz
3V 1试456 T qqqqq zzz
4H 234567 T qqqqq zzz
90000000

想要的结果是
$cat output.txt
1F 123456 F qqqqq zzz            
2G 7测012 G qqqqq zzz
3V 1试456 V qqqqq zzz
4H 234567 H qqqqq zzz
90000000

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
2 [报告]
发表于 2015-10-22 15:30 |显示全部楼层
sunzhiguolu 发表于 2015-10-22 15:20
有几点不太明白, 还请楼主解释一下:
1.> 主机环境是什么? (Linux | Windows)
2.> 您的文本中汉字占用几个 ...


你好!
1.主机环境是Linux
2.文本中汉字占用两个字节

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
3 [报告]
发表于 2015-10-22 16:26 |显示全部楼层
sunzhiguolu 发表于 2015-10-22 15:38
回复 3# robinhappiness
确定汉字在文本中占用两个字节? 您测试过了吗? (编码方式是什么)
能否将测试的结 ...


测试了一下您的sed命令,请教一个问题。

处理对象文件内容
$cat target.txt
1F 123456 T qqqqq zzz              
2G 7测012 T qqqqq zzz
3V 1试456 T qqqqq zzz
4H 234567 T qqqqq zzz
90000000

实际执行结果
1F 123456 F qqqqq zzz              
2G 7测012 TG qqqqq zzz
3V 1试456 TV qqqqq zzz
4H 234567 H qqqqq zzz
90000000


想要的结果是
1F 123456 F qqqqq zzz            
2G 7测012 G qqqqq zzz
3V 1试456 V qqqqq zzz
4H 234567 H qqqqq zzz


----------------
我是这样实现的。
cut原文件的第2列,aaa.txt
然后再cut原文件的1到10列,bbb.txt
然后再cut原文件的12列以后,ccc.txt

然后取消aaa.txt bbb.txt 换行之后合并cat bbb.txt aaa.txt ccc.txt > output.txt

感觉这个办法有点儿饶,所以想请教有没有更好的办法。

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
4 [报告]
发表于 2015-10-23 09:29 |显示全部楼层
非常感谢各位高人的回复!

我之前做的测试数据比较规范,实际上要处理的对象文件里面包含有全角和半角的空格、汉字、数字、符号等都有,
而且每个字段的划分也没规律,打个比方我要把第2byte的数值插入到第25byte的位置(zz0和yyy之间),
第1和第2byte位置的值肯定只占一个字节,还有第25byte的位置肯定为只站一个字节的半角空格。
字段的布局没有规律!

想要做的事情就是把文件中的第2byte位置的列值(只占1个字节的字母)
赋值到文件中第25byte空格(只占一个字节的半角空格)的位置。

对象文件
$cat input.txt
1000000
1F 123456 ー  qqq q zz0 yyy  
2G 7测012 --  q qq  zz0 yyy
3V 1试456     qq  qq zz0 yyy
4H 234567    qqq  q zz0 yyy
09000000

想要的输出结果
$cat output.txt
1000000
1F 123456 ー  qqq q zz0Fyyy  
2G 7测012 --  q qq  zz0Gyyy
3V 1试456     qq  qq zz0Vyyy
4H 234567    qqq  q zz0Hyyy
09000000

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
5 [报告]
发表于 2015-10-25 21:53 |显示全部楼层
MMMIX 发表于 2015-10-23 20:49
回复 13# robinhappiness


我上传一个input文件和一个output文件图片来说明一下。
文件内容中,每条记录的长度都占50byte,在每行的第51byte位置开始换行。
除了第一行和最后一行之外的第2byte位置的值需要设定到第25byte位置。
处理前后的文件大小不能够有差异。文件中含有半角,全角的字符,数字,空格等。

input.txt:

1sadw2we21                                       
1F 123456  ー-  qqq  00      00000000            
2G 7漢012 -  -  qq  00      00000000            
3V 1字456   /  q q  00      00000000            
4H 234567 1 2 3  q 00      00000000            
0900000000                                       


output.txt:

1sadw2we21                                       
1F 123456  ー-  qqq  00F     00000000            
2G 7漢012 -  -  qq  00G     00000000            
3V 1字456   /  q q  00V     00000000            
4H 234567 1 2 3  q 00H     00000000            
0900000000                                       
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP