免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 16625 | 回复: 15
打印 上一主题 下一主题

[转贴]SHELL下十二种读文件的方法  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-13 14:12 |只看该作者 |倒序浏览
以KSH为例:

  1. #!/usr/bin/ksh
  2. #
  3. # SCRIPT: 12_ways_to_parse.ksh.ksh
  4. #
  5. #
  6. # REV: 1.2.A
  7. #
  8. # PURPOSE:  This script shows the different ways of reading
  9. #       a file line by line.  Again there is not just one way
  10. #       to read a file line by line and some are faster than
  11. #       others and some are more intuitive than others.
  12. #
  13. # REV LIST:
  14. #
  15. #       03/15/2002 - Randy Michael
  16. #       Set each of the while loops up as functions and the timing
  17. #       of each function to see which one is the fastest.
  18. #
  19. #######################################################################
  20. #
  21. #       NOTE: To output the timing to a file use the following syntax:
  22. #
  23. #          12_ways_to_parse.ksh file_to_process  > output_file_name 2>&1
  24. #
  25. #       The actaul timing data is sent to standard error, file
  26. #       descriptor (2), and the function name header is sent
  27. #       to standard output, file descriptor (1).
  28. #
  29. #######################################################################
  30. #
  31. # set -n  # Uncomment to check command syntax without any execution
  32. # set -x  # Uncomment to debug this script
  33. #

  34. FILENAME="$1"
  35. TIMEFILE="/tmp/loopfile.out"
  36. >$TIMEFILE
  37. THIS_SCRIPT=$(basename $0)

  38. ######################################
  39. function usage
  40. {
  41. echo "\nUSAGE: $THIS_SCRIPT  file_to_process\n"
  42. echo "OR - To send the output to a file use: "
  43. echo "\n$THIS_SCRIPT  file_to_process  > output_file_name 2>&1 \n"
  44. exit 1
  45. }
  46. ######################################
  47. function while_read_LINE
  48. {
  49. cat $FILENAME | while read LINE
  50. do
  51.         echo "$LINE"
  52.         :
  53. done
  54. }
  55. ######################################
  56. function while_read_LINE_bottom
  57. {
  58. while read LINE
  59. do
  60.         echo "$LINE"
  61.         :

  62. done < $FILENAME
  63. }
  64. ######################################
  65. function while_line_LINE_bottom
  66. {
  67. while line LINE
  68. do
  69.         echo $LINE
  70.         :
  71. done < $FILENAME
  72. }
  73. ######################################
  74. function cat_while_LINE_line  
  75. {
  76. cat $FILENAME | while LINE=`line`
  77. do
  78.         echo "$LINE"
  79.         :
  80. done
  81. }
  82. ######################################
  83. function while_line_LINE
  84. {
  85. cat $FILENAME | while line LINE
  86. do
  87.         echo "$LINE"
  88.         :
  89. done
  90. }
  91. ######################################
  92. function while_LINE_line_bottom
  93. {
  94. while LINE=`line`
  95. do
  96.         echo "$LINE"
  97.         :

  98. done < $FILENAME
  99. }
  100. ######################################
  101. function while_LINE_line_cmdsub2
  102. {
  103. cat $FILENAME | while LINE=$(line)
  104. do
  105.         echo "$LINE"
  106.         :
  107. done
  108. }
  109. ######################################
  110. function while_LINE_line_bottom_cmdsub2
  111. {
  112. while LINE=$(line)
  113. do
  114.         echo "$LINE"
  115.         :

  116. done < $FILENAME
  117. }
  118. ######################################
  119. function while_read_LINE_FD
  120. {
  121. exec 3<&0
  122. exec 0< $FILENAME
  123. while read LINE
  124. do
  125.         echo "$LINE"
  126.         :
  127. done
  128. exec 0<&3
  129. }
  130. ######################################
  131. function while_LINE_line_FD
  132. {
  133. exec 3<&0
  134. exec 0< $FILENAME
  135. while LINE=`line`
  136. do
  137.         echo "$LINE"
  138.         :
  139. done
  140. exec 0<&3
  141. }
  142. ######################################
  143. function while_LINE_line_cmdsub2_FD
  144. {
  145. exec 3<&0
  146. exec 0< $FILENAME
  147. while LINE=$(line)
  148. do
  149.         print "$LINE"
  150.         :
  151. done
  152. exec 0<&3
  153. }
  154. ######################################
  155. function while_line_LINE_FD
  156. {
  157. exec 3<&0
  158. exec 0< $FILENAME

  159. while line LINE
  160. do
  161.         echo "$LINE"
  162.         :
  163. done

  164. exec 0<&3
  165. }
  166. ######################################
  167. ########### START OF MAIN ############
  168. ######################################

  169. # Test the Input

  170. # Looking for exactly one parameter
  171. (( $# == 1 )) || usage

  172. # Does the file exist as a regular file?
  173. [[ -f $1 ]] || usage

  174. echo "\nStarting File Processing of each Method\n"

  175. echo "Method 1:"
  176. echo "\nfunction while_read_LINE\n" >> $TIMEFILE
  177. echo "function while_read_LINE"
  178. time while_read_LINE >> $TIMEFILE
  179. echo "\nMethod 2:"
  180. echo "\nfunction while_read_LINE_bottom\n" >> $TIMEFILE
  181. echo "function while_read_LINE_bottom"
  182. time while_read_LINE_bottom >> $TIMEFILE
  183. echo "\nMethod 3:"
  184. echo "\nfunction while_line_LINE_bottom\n" >> $TIMEFILE
  185. echo "function while_line_LINE_bottom"
  186. time while_line_LINE_bottom >> $TIMEFILE
  187. echo "\nMethod 4:"
  188. echo "\nfunction cat_while_LINE_line\n" >> $TIMEFILE
  189. echo "function cat_while_LINE_line"
  190. time cat_while_LINE_line >> $TIMEFILE
  191. echo "\nMethod 5:"
  192. echo "\nfunction while_line_LINE\n" >> $TIMEFILE
  193. echo "function while_line_LINE"
  194. time while_line_LINE >> $TIMEFILE
  195. echo "\nMethod 6:"
  196. echo "\nfunction while_LINE_line_bottom\n" >> $TIMEFILE
  197. echo "function while_LINE_line_bottom"
  198. time while_LINE_line_bottom >> $TIMEFILE
  199. echo "\nMethod 7:"
  200. echo "\nfunction while_LINE_line_cmdsub2\n" >> $TIMEFILE
  201. echo "function while_LINE_line_cmdsub2"
  202. time while_LINE_line_cmdsub2 >> $TIMEFILE
  203. echo "\nMethod 8:"
  204. echo "\nfunction while_LINE_line_bottom_cmdsub2\n" >> $TIMEFILE
  205. echo "function while_LINE_line_bottom_cmdsub2"
  206. time while_LINE_line_bottom_cmdsub2 >> $TIMEFILE
  207. echo "\nMethod 9:"
  208. echo "\nfunction while_read_LINE_FD\n" >> $TIMEFILE
  209. echo "function while_read_LINE_FD"
  210. time while_read_LINE_FD >> $TIMEFILE
  211. echo "\nMethod 10:"
  212. echo "\nfunction while_LINE_line_FD\n" >> $TIMEFILE
  213. echo "function while_LINE_line_FD"
  214. time while_LINE_line_FD >> $TIMEFILE
  215. echo "\nMethod 11:"
  216. echo "\nfunction while_LINE_line_cmdsub2_FD\n" >> $TIMEFILE
  217. echo "function while_LINE_line_cmdsub2_FD"
  218. time while_LINE_line_cmdsub2_FD >> $TIMEFILE
  219. echo "\nMethod 12:"
  220. echo "\nfunction while_line_LINE_FD\n" >> $TIMEFILE
  221. echo "function while_line_LINE_FD"
  222. time while_line_LINE_FD >> $TIMEFILE
复制代码
wayy2008 该用户已被删除
2 [报告]
发表于 2005-12-13 14:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-12-13 14:16 |只看该作者
厉害!!!

论坛徽章:
0
4 [报告]
发表于 2005-12-13 16:06 |只看该作者
后面好像还有这12种方法的效率的比较

论坛徽章:
0
5 [报告]
发表于 2005-12-13 16:06 |只看该作者
强,似乎我只会2种。

((

论坛徽章:
0
6 [报告]
发表于 2005-12-13 21:03 |只看该作者
茴香豆的茴字有四种写法

论坛徽章:
0
7 [报告]
发表于 2005-12-15 09:50 |只看该作者
这个好像是一本书上的,前几天看了一下,然后就还给图书馆了

论坛徽章:
0
8 [报告]
发表于 2005-12-17 00:10 |只看该作者
dbcat又是一个冉冉升起的美女星座啊。

论坛徽章:
0
9 [报告]
发表于 2005-12-26 20:21 |只看该作者
<<精通UNIX Shell脚本编程>>

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-12-26 23:06 |只看该作者
原帖由 icesummit 于 2005-12-17 00:10 发表
dbcat又是一个冉冉升起的美女星座啊。

N天不见她了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP