免费注册 查看新帖 |

Chinaunix

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

新人求教:关于文件句柄和管道 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-12 22:28 |只看该作者 |倒序浏览
  1. open(FOO, "| wc -w ");
  2. open(DB, "emp.names");
  3. while(<DB>){ print FOO "$_"; }
  4. close FOO;

  5. file emp.names:
  6. Steve Blenheim
  7. Betty Boop
  8. Igor Chevsky
  9. Norma Cord
  10. Jon DeLoach
  11. Karen Evich

复制代码
书上看到的一个很简单的例子,我以为每读入一行文件内容就会输出一次wc -w的结果,也就是会输出6个2,结果却输出了总和12,求运行原理,先谢谢各位!

论坛徽章:
0
2 [报告]
发表于 2011-11-13 08:05 |只看该作者
wc (word count)是整个汇总的,不是按行输出的

结果一样: cat emp.names |wc -w

论坛徽章:
0
3 [报告]
发表于 2011-11-13 14:20 |只看该作者
回复 2# Kitaisky


    但是文件句柄一次只处理一行,我以为是像下面这样运行的,就是搞不明白为什么逐行处理,最后却得出总的结果,望再指教,谢谢
  1. cat emp.names |while read line
  2. do
  3. echo $line|wc -w
  4. done
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-11-13 14:28 |只看该作者
回复 3# lqianc
  1. 你的代码应该类似于这样:
  2.     cat file|while read line
  3.     do
  4.     echo $line
  5.     done |wc -w
  6.      
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-11-13 22:52 |只看该作者
回复 4# yinyuemi


    为什么不是每读取一行就传递到wc -w呢

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2011-11-14 03:27 |只看该作者
回复 5# lqianc


    Try:
  1. echo 'Steve Blenheim
  2. Betty Boop
  3. Igor Chevsky
  4. Norma Cord
  5. Jon DeLoach
  6. Karen Evich' |perl -e 'while(<>){open (FOO,"|wc -c"); print FOO;close(FOO)};'
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-11-14 22:20 |只看该作者
回复  lqianc


    Try:
yinyuemi 发表于 2011-11-14 03:27



    每行都要打开和关闭句柄,有其他方法只打开一次吗?不懂~请教高手!

论坛徽章:
1
申猴
日期:2014-04-18 16:29:14
8 [报告]
发表于 2011-11-14 22:58 |只看该作者
是不是wc -w 以文件结尾标示为结尾标示,\n就无视了  

论坛徽章:
0
9 [报告]
发表于 2011-11-16 22:49 |只看该作者
  1. open(DB, "emp.names");
  2. while(<DB>){
  3.         split /\W+/;
  4.         print $#_+1 ."\n";
  5.              }
  6. close(DB);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP