bash编程中是否有写缓冲区?
发布时间:2020-12-15 21:54:23 所属栏目:安全 来源:网络整理
导读:在bash编程中是否有任何写入文件缓冲区?如果有,可以改变它的大小. 这是问题所在 我有一个bash脚本,它逐行读取文件,然后操作读取数据,然后将结果写入另一个文件.像这样的东西 while read line some grep,but and sed echo and append to another file 输入数
在bash编程中是否有任何写入文件缓冲区?如果有,可以改变它的大小.
这是问题所在 我有一个bash脚本,它逐行读取文件,然后操作读取数据,然后将结果写入另一个文件.像这样的东西 while read line some grep,but and sed echo and append to another file 输入数据非常庞大(近20GB的文本文件).进度很慢所以出现一个问题,如果bash的默认行为是将结果写入每个读取行的输出文件中,那么进度将很慢. 所以我想知道,是否有任何机制来缓冲某些输出然后将该块写入文件?我在互联网上搜索了这个问题,但没有找到任何有用的信息…… 是操作系统相关的问题还是bash?操作系统是centos版本6. 脚本是 #!/bin/bash BENCH=$1 grep "CPU 0" $BENCH > `pwd`/$BENCH.cpu0 grep -oP '(?<=<[vp]:0x)[0-9a-z]+' `pwd`/$BENCH.cpu0 | sed 'N;s/n/ /' | tr '[:lower:]' '[:upper:]' > `pwd`/$BENCH.cpu0.data.VP echo "grep done" while read line ; do w1=`echo $line | cut -d ' ' -f1` w11=`echo "ibase=16; $w1" | bc` w2=`echo $line | cut -d ' ' -f2` w22=`echo "ibase=16; $w2" | bc` echo $w11 $w22 >> `pwd`/$BENCH.cpu0.data.VP.decimal done <"`pwd`/$BENCH.cpu0.data.VP" echo "convertion done" 解决方法
只是为了看看差异是什么,我创建了一个包含一堆的文件
a somewhat long string followed by a number: 0000001 包含10,000行(约50MiB),然后通过shell读取循环运行它 while read line ; do echo $line | grep '00$' | cut -d " " -f9 | sed 's/^00*//' done < data > data.out 花了将近6分钟.与同等相比 grep '00$' data | cut -d " " -f9 | sed 's/^00*//' > data.fast 花了0.2秒.为了消除分叉的成本,我测试了 while read line ; do : done < data > data.null 其中:是一个内置的shell,什么都不做.正如预期的那样data.null没有内容,循环仍然花了21秒来运行我的小文件.我想测试一个20GB的输入文件,但我不是那么耐心. 结论:学习如何使用awk或perl,因为如果你在我写这篇文章时尝试使用你发布的脚本,你会永远等待. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |