分页: 1 / 1

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

发表于 : 2009-03-26 0:28
tiany
最近开始常使用linux,看那些基本的shell命令的时候想到的

代码: 全选

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

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

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

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

还望大家多多指教,先谢谢了~~

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

发表于 : 2009-03-26 9:02
eexpress
grep '^en'
正则而已

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

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

代码: 全选

sed 's/\ en/\nen/g' file|grep "^en"|wc -l

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

发表于 : 2009-03-26 18:53
tiany
嗯,2楼的方法还是只能数有en打头的单词的行的数目,不过还是很感谢

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

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

万分感谢

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

发表于 : 2009-03-26 19:30
tiany
对3楼命令的测试如下

文件内容

代码: 全选

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

2

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

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

晕晕

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

发表于 : 2009-03-26 20:08
c\nc
grep -o "\<en\>" FILE | wc -l

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

发表于 : 2009-03-26 20:35
xiooli
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(~)<<

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

发表于 : 2009-03-26 23:15
aerofox

代码: 全选

grep -o "\<en" FILE | wc -l
就是 c\nc 给出的,纠正一下笔误。

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

发表于 : 2009-03-26 23:22
c\nc
多谢多谢,我看成有多少个“en“了~ :em06

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

发表于 : 2009-03-28 0:12
tiany
呵呵,几天白天忙,现在终于有时间回帖了

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

问题基本弄清楚了

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

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

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

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

谢谢大家了

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

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