- 论坛徽章:
- 1
|
本帖最后由 psmzs 于 2015-09-11 22:24 编辑
我遇到这么一个情况,100多个文件大小不一,最大的有几百M,里面记录分隔使用的逗号,但是字段里的数据可能含有回车和换行,每条记录分隔是以|$|作为标记。由于为了用sort能对每个文件进行排序(貌似sort是以换行符作为记录的分隔,但是由于字段也含有回车和换行,因此排序会受影响。)因此想了一个方案删除了每个文件的回车\r和换行\n,然后在|$|之后再加个换行\n,因此写了如下代码
files.txt 包含了所有文件的名字
while read fileName
do
tr -d '\r\n' < $fileName | sed 's/|\$|/&\n/' | sort > ${fileName}_bak(此法程序运行卡卡住了,CPU被sed占到了100%,等了很长时间没运行完)
#后来尝试了改为awk 以为awk能快点,貌似还是很慢 ,CPU也到了100%,现象同上 cat $fileName | awk 'BEGIN{FS=",";RS="\\|\\$\\|"}{gsub(/[\r\n]+/,"");print}'| sort > ${fileName}_bak
#后来考虑是不是管道的影响,把命令拆开,还是不行,求高手优化,帮忙分析CPU占过高的原因!!
done < files.txt
自己以前还碰到一个情况就是N多文件,想删除每个文件里的空格,写了一个循环,遍历每个文件,在循环里用sed删空格,但是程序也卡住了,很长时间没运行完,后来改为awk删除空格才没卡住,求大,家分析原因给出好的法子。 |
|