Bootstrap

linux下sed awk gsub 替换分隔符效率比较

同事有个替换分隔符的需求,','替换为'\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}' 旧文件 > 新文件

;