免费注册 查看新帖 |

Chinaunix

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

请教字符串替换的问题 [复制链接]

论坛徽章:
0
发表于 2012-02-23 14:55 |显示全部楼层

格式如下:
/home/AV1/2010-02-11/1e/1e0605fb0307ab83a6917a1a8cbcbfbe<>PE<>tElock 0.99 - 1.0 private -> tE!
/home/AV1/2010-02-11/1e/1e0a936636cb7cb61df2828af3857156<>PE<>!tElock 0.99 - 1.0 private -> tE!
/home/AV1/2010-02-10/ac/acaf95a1f607f8c42a0a32543f2c93fd<>PE<>None
/home/AV1/2010-02-10/ac/aca7325a16062b52db270d55daf95c55<>PE<>NoPacker Borland Delphi v3.0
/home/AV1/2010-02-10/ac/ac8b6f0681943f555fe0669fe773300a<>PE<>NoPacker Microsoft Visual Basic v5.0
/home/AV1/2010-02-10/ac/ac8b20a743edd4e55173637797cba3f0<>PE<>NoPacker Microsoft Visual C++ v6.0
/home/AV1/2010-02-10/ac/ac884bdc94e016f33ed39ca5abecaac7<>PE<>NoPacker Microsoft Visual C++ v7.0
/home/AV1/2010-02-10/ac/ac86e517c8d7dcb510fe131166287d97<>PE<>None
/home/AV1/2010-02-10/ac/ac6326bd61ee6cf802f036dfc366f8ee<>PE<>NoPacker Borland Delphi
/home/AV1/2010-02-10/ac/ac5edc6ffc9092d604cf48c7c756fdbe<>PE<>UPX -> www.upx.sourceforge.net
/home/AV1/2010-02-10/ac/ac42ac17517cdeba9ad4b7537017815e<>PE<>NoPacker Borland Delphi 4.0
/home/AV1/2010-02-10/ac/ac3f4bfb9b01b94606184254ad5b11c9<>PE<>NoPacker Microsoft Visual C++ v6.0
/home/AV1/2010-02-10/ac/ac235850b50b9e608395001d3da78280<>PE<>ASPack v2.1
/home/AV1/2010-02-10/ac/ac18bfc62a4b02099215deb148757951<>PE<>BobSoft Mini Delphi -> BobSoft
/home/AV1/2010-02-10/ac/ac1433ee703e872df132cf58540ebb9d<>PE<>None

处理之后变成:
/home/AV1/2010-02-11/1e/1e0605fb0307ab83a6917a1a8cbcbfbe<>PE<>None
/home/AV1/2010-02-11/1e/1e0a936636cb7cb61df2828af3857156<>PE<>None
/home/AV1/2010-02-10/ac/acaf95a1f607f8c42a0a32543f2c93fd<>PE<>None
/home/AV1/2010-02-10/ac/aca7325a16062b52db270d55daf95c55<>PE<>NoPacker Borland Delphi v3.0
/home/AV1/2010-02-10/ac/ac8b6f0681943f555fe0669fe773300a<>PE<>NoPacker Microsoft Visual Basic v5.0
/home/AV1/2010-02-10/ac/ac8b20a743edd4e55173637797cba3f0<>PE<>NoPacker Microsoft Visual C++ v6.0
/home/AV1/2010-02-10/ac/ac884bdc94e016f33ed39ca5abecaac7<>PE<>NoPacker Microsoft Visual C++ v7.0
/home/AV1/2010-02-10/ac/ac86e517c8d7dcb510fe131166287d97<>PE<>None
/home/AV1/2010-02-10/ac/ac6326bd61ee6cf802f036dfc366f8ee<>PE<>NoPacker Borland Delphi
/home/AV1/2010-02-10/ac/ac5edc6ffc9092d604cf48c7c756fdbe<>PE<>None
/home/AV1/2010-02-10/ac/ac42ac17517cdeba9ad4b7537017815e<>PE<>NoPacker Borland Delphi 4.0
/home/AV1/2010-02-10/ac/ac3f4bfb9b01b94606184254ad5b11c9<>PE<>NoPacker Microsoft Visual C++ v6.0
/home/AV1/2010-02-10/ac/ac235850b50b9e608395001d3da78280<>PE<>None
/home/AV1/2010-02-10/ac/ac18bfc62a4b02099215deb148757951<>PE<>None
/home/AV1/2010-02-10/ac/ac1433ee703e872df132cf58540ebb9d<>PE<>None

经过处理后,期望:

1,最后一个 <> 之后凡是不紧跟着 NoPacker 或者 Nopacker 标记的,都被替换成 None;
2,有 NoPacker 或者 Nopacker 标记的,保持原样;
3,要保证排序和原始一致,就是说原来在第19863行,现在就在第19863那行;
4,每个文件较大,大约在5000万行左右,所以处理效率是重点。

我没有想出来直接用cat + sed/awk处理的语句,用for读出每行来处理是很简单,但是效率太低,无法接受。
所以还请大家指点,谢谢。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-02-23 15:07 |显示全部楼层
本帖最后由 yinyuemi 于 2012-02-23 15:09 编辑

awk 'BEGIN{FS=OFS="<>"}$NF!~/^No[pP]acker/{$NF="None"}1'

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-02-23 15:13 |显示全部楼层
sed '/<>No[Pp]acker/! s/\(<>PE<>\).*$/\1None/'
也许这个更快

论坛徽章:
0
发表于 2012-02-23 15:20 |显示全部楼层
  1. awk 'BEGIN{FS=OFS="<>"}{if($NF !~ /^No[Pp]acker*/ && $NF !~ /^None/)$NF="None"}1' file
复制代码

论坛徽章:
0
发表于 2012-02-23 15:41 |显示全部楼层
用2楼的命令,用mawk来执行,应该是最快

论坛徽章:
0
发表于 2012-02-23 16:50 |显示全部楼层
本帖最后由 yqhzh 于 2012-02-24 10:50 编辑

结贴:

800w 行数据的测试结果:

yinyuemi 的第一种方法 awk 'BEGIN{FS=OFS="<>"}$NF!~/^No[pP]acker/{$NF="None"}1'  耗时 90s,处理结果正确。

yinyuemi 的第二种方法 sed '/<>No[Pp]acker/! s/\(<>PE<>\).*$/\1None/' 耗时85s,但对某些含有中文字符的行处理有误,例如这一行:
/home/AV1/2010-02-10/ac/bf3f46f51675414c14c184ca6cfdcaa3<>PE<>PE_Protector V2.60(hying's PE-Armor V0.460 modify) -> Engprog Sign.By.fly
其中两个括号()就是中文字符。

abc163635 的方法 awk 'BEGIN{FS=OFS="<>"}{if($NF !~ /^No[Pp]acker*/ && $NF !~ /^None/)$NF="None"}1' 耗时 90s,处理结果正确。

非常感谢你们,我也学到好方法了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP