shell相关命令效率
参考:
http://forum.ubuntu.com.cn/viewtopic.php?f=21&t=176872&start=15
http://blog.csdn.net/wireless_tech/article/details/6560308
1. cat + 管道 + grep 和grep的区别:
cat 命令的含义是串接,也就是说 cat 的功能是把文件串接成一个文件。cat *.c 就把当前目录下的所有 .c 串接成一个文件并输出。——由于cat这个命令的用途是用于拼接,所以对于单个文件使用拼接没有意义,但是为了记忆命令的统一性,习惯性拼接没有坏处。
grep 的本质是查找,当从标准输入接收的时候,只显示查找到的匹配行,当从文件接收的时候,除了显示查找到的行还要显示文件名。——但是grep有一个很不一致的特性,就是当grep查找到的匹配行只在一个文件中时,不显示文件名,而在多个文件中时要显示文件名——这种不一致的行为导致了解析grep输出需要一些额外的判断。
使用 cat 命令能保证 grep 在匹配行上总是不输出文件名,方便了输出解析,这是好处之一。
好处之二是:管道是双进程同时运行的,在多核机器上,这能够提高效率。——之所以推荐管道是因为 Unix 起源于服务器,而服务器最初就是多CPU的,使用管道能够优化CPU使用,减轻服务器负担。
简单的说:如果使用 grep 带参数,那么读文件和处理都是一个进程。如果使用 cat 管道,那么用的是两个进程,效率更高。在多核普及的将来,绝对应当推荐尽可能的使用管道,即使认为管道是标准方式也在所不惜。
2. 如果能使用grep命令不要使用awk
3.对于比较大的文件,sort命令尽量使用-T选项指定临时文件生成文件夹
如果sort不指定临时文件生成文件夹,那么将默认将sort中产生的临时文件放到系统临时目录,当你的文件过大,超过根目录盘的空余空间时,不仅脚本执行不完,还会造成系统一些问题,所以请sort较大文件时加上-T选项,把临时文件生成指定到剩余空间较大的其他盘。
要提高脚本效率,大家可以用time命令来测量你使用的命令的效率,当然不对能同一文件用不同的命令测量,而应该对同一类型其他文件进行测试,因为在第一次使用该文件之后,系统会把该文件的处理过程放到内存中并没有释放,您再次使用该文件的时候,系统处理时间当然变快很多。