请教一个统计指定文件中指定打头的单词的个数的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
tiany
帖子: 10
注册时间: 2007-10-29 15:57
送出感谢: 0
接收感谢: 0

请教一个统计指定文件中指定打头的单词的个数的问题

#1

帖子 tiany » 2009-03-26 0:28

最近开始常使用linux,看那些基本的shell命令的时候想到的

代码: 全选

cat abc.txt | grep en | wc -l
用这个应该可以统计abc.txt中有en的行数

但是如果想统计abc.txt中开头是en的单词的个数应该如何写呢?

看了下 man grep 和 man wc 还是不知道应该如何

感觉看man的内容不知道如何看起,不知道大家一般都是怎么看的?

还望大家多多指教,先谢谢了~~
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#2

帖子 eexpress » 2009-03-26 9:02

grep '^en'
正则而已
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#3

帖子 xiooli » 2009-03-26 11:14

eexpress 写了:grep '^en'
正则而已
你这个只是每行以en开头的啊。
照理用awk比较好,不过也有其他办法,来个变态的:

代码: 全选

sed 's/\ en/\nen/g' file|grep "^en"|wc -l
tiany
帖子: 10
注册时间: 2007-10-29 15:57
送出感谢: 0
接收感谢: 0

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#4

帖子 tiany » 2009-03-26 18:53

嗯,2楼的方法还是只能数有en打头的单词的行的数目,不过还是很感谢

3楼的可以也给出用awk做的写法么?

3楼的命令的结果好像也不对 -_-!

万分感谢
tiany
帖子: 10
注册时间: 2007-10-29 15:57
送出感谢: 0
接收感谢: 0

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#5

帖子 tiany » 2009-03-26 19:30

对3楼命令的测试如下

文件内容

代码: 全选

en1 en2 en3 en4
en5 5en
执行三楼的命令后的结果输出

2

那个替换命令貌似是有问题的

我只会在vi里面的替换~~

晕晕
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51
送出感谢: 0
接收感谢: 0

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#6

帖子 c\nc » 2009-03-26 20:08

grep -o "\<en\>" FILE | wc -l
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#7

帖子 xiooli » 2009-03-26 20:35

tiany 写了:对3楼命令的测试如下

文件内容

代码: 全选

en1 en2 en3 en4
en5 5en
执行三楼的命令后的结果输出

2

那个替换命令貌似是有问题的

我只会在vi里面的替换~~

晕晕
怎么会,我执行结果是正确的阿:

代码: 全选

xiooli(~)<< cat file
en1 en2 en3 en4
en5 5en
xiooli(~)>> sed 's/\ en/\nen/g' file |grep "^en"|wc -l
5
xiooli(~)<<
下面是awk的:

代码: 全选

xiooli(~)<< cat file
en1 en2 en3 en4
en5 5en
xiooli(~)>> awk '{for(i=1;i<=NF;i++)if($i~/^en/)count++};END{print count}' file
5
xiooli(~)<<
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#8

帖子 aerofox » 2009-03-26 23:15

代码: 全选

grep -o "\<en" FILE | wc -l
就是 c\nc 给出的,纠正一下笔误。
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51
送出感谢: 0
接收感谢: 0

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#9

帖子 c\nc » 2009-03-26 23:22

多谢多谢,我看成有多少个“en“了~ :em06
tiany
帖子: 10
注册时间: 2007-10-29 15:57
送出感谢: 0
接收感谢: 0

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#10

帖子 tiany » 2009-03-28 0:12

呵呵,几天白天忙,现在终于有时间回帖了

呵呵,首先谢谢各位的热心帮助哈

问题基本弄清楚了

3L的方法是对的,之所以我刚开始测试说那个方法错了,是因为当时看帖的时候是win系统,然后偷懒远程连了个Unix的测试的,结果有问题,返回的是2

对这个有点疑问,产生这个问题的原因是因为Unix和Linux对sed命令的处理上有差异 还是对换行的处理有差异?在Unix下我换了csh,sh,bash结果都不对

awk的那个的测试结果是对了,呵,对awk的兴趣更浓了

c\nc的方法也是可以解决的,不过可不可以麻烦你给我解释下 -o 参数的含义,看了man里面的,不是看的很懂。。。

谢谢大家了
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: 请教一个统计指定文件中指定打头的单词的个数的问题

#11

帖子 aerofox » 2009-03-29 23:52

grep -o 就是只输出匹配的部分,GNU grep 带此选项,如果用的 UNIX,可能没有这个选项。
正常情况 grep 输出所有匹配的行,加上 -o 后就把所有匹配的部分每个一行地输出。当查找的模式是一个普通的字符串(不含正则表达式中的特殊字符)时,可能也就是可以用于计数了(如本例)。但是如果用上正则表达式,则可能有更多的用途。参见:viewtopic.php?f=21&t=190079
回复

回到 “Shell脚本”