首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

文本文件改建方法

2013-07-01 
文本文件改造方法有个文件10M左右,文件格式如下:102003011875914168700004201301141427102013011414401300

文本文件改造方法
有个文件10M左右,文件格式如下:
10
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
90
我想批量对他们做下处理:

把第一行10和最后一行90去掉;
把第6个字符、第30个字符、第33个字符后边加添加逗号‘,’;
文件重新保存,不变位置、不变名称。

最好是sh,perl也可以。

小弟对脚本语言了解颇浅,大神们赐教啊。 Perl
[解决办法]
sed script:


1 d # 去掉第一行
$ d # 去掉最后一行
s/^\(.\{6\}\)\(.\{24\}\)\(.\{3\}\)\(.*\)$/\1,\2,\3,\4/ # 加逗号,自己可调整6,24,3


例子:

/tmp/ cat sss
10
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
20030118759141687  0  0004201301141427102013011414401300078300001061050000311426
90
/tmp/ cat reformat
1 d # 去掉第一行
$d  # 去掉最后一行
s/^\(.\{6\}\)\(.\{24\}\)\(.\{3\}\)\(.*\)$/\1,\2,\3,\4/ # 加逗号,自己可调整6,24,3

/tmp/ sed -f reformat sss
200301,18759141687  0  00042013,011,41427102013011414401300078300001061050000311426
200301,18759141687  0  00042013,011,41427102013011414401300078300001061050000311426
200301,18759141687  0  00042013,011,41427102013011414401300078300001061050000311426

[解决办法]
貌似最多捕获9组,\10变成分组1+字符0了...
[解决办法]
可以用这样的办法克服9组的上限。

1 d # 去掉第一行
$ d  # 去掉最后一行
# 加逗号,自己可调整6,24,3, 在\4前插一个标记B(任何不会出现的字符都行),方便下一个命令操作
s/^\(.\{6\}\)\(.\{24\}\)\(.\{3\}\)\(.*\)$/\1,\2,\3,B\4/
# 继续处理[后面的部分
s/B\(.\{4\}\)\(.\{10\}\)\(.*\)$/\1, \2, \3/ 


例子 (4142, 710..., 4144...这三组是第二个命令产生的):

/tmp/ sed -f sff sss
200301,18759141687  0  00042013,011,4142, 7102013011, 414401300078300001061050000311426
200301,18759141687  0  00042013,011,4142, 7102013011, 414401300078300001061050000311426
200301,18759141687  0  00042013,011,4142, 7102013011, 414401300078300001061050000311426

热点排行