同事有个替换分隔符的需求,','替换为'\x01',文件记录数有2亿+。使用sed处理1000w条数据大约用了10分钟,算下来整个文件处理完要用200分钟,时间过长。记得去掉csv文件每行记录的最后一个字段时awk处理要比sed快很多,于是尝试使用awk来替换分隔符,经过测试效率能够提高5-6倍,在此记录一下。
一、对一个200w+的文件处理,每行有6个字段
1、使用sed处理(用时76s)
sed -i "s/,/\\x01/g" 文件名
2、使用awk+gsub(用时51s)
awk '{ gsub(/,/,"\x01"); print $0 }' 旧文件 > 新文件
3、使用awk拼接(用时14s)
awk -F ',' -v p='\x01' '{ print $1p$2p$3p$4p$5p$6p}' 旧文件 > 新文件
二、对2亿+文件处理,每行有14个字段
awk -F ',' -v p='\x01' '{ print $1p$2p$3p$4p$5p$6p$7p$8p$9p$10p$11p$12p$13p$14}' 旧文件 > 新文件
耗时32分钟35秒,能够满足同事需求了。
另外两种方法处理不到3000w数据就超过20分钟了,要下班了,没再继续试验,有更高效的方法欢迎留言讨论。
版权声明:本文为huazicomeon原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。