Unix命令用于计算包含字母组合的单词数(其间包含重复和字母)

时间:2014-04-09 06:50:10

标签: unix grep

如何计算包含所有字母a,b和c的文本文件中的单词数。这些字母可能在单词中出现不止一次,单词也可能包含其他字母。 (例如," cabby"应该计算在内。)

使用应返回2的样本输入:

abc abb cabby

我试过了两个:

grep -E "[abc]" test.txt | wc -l 

grep 'abcdef' testCount.txt | wc -l

两者都返回1而不是2。

提前致谢!

3 个答案:

答案 0 :(得分:1)

您可以使用awk并使用sub函数的返回值。如果成功替换,sub函数的返回值将是完成的替换次数。

$ echo "abc abb cabby" | 
awk '{
    for(i=1;i<=NF;i++) 
    if(sub(/a/,"",$i)>0 && sub(/b/,"",$i)>0 && sub(/c/,"",$i)>0) {
        count+=1
    }
}
END{print count}'
2

对于所有三个字母,我们将返回值的条件保持为大于0。当在单词中找到所有三个字母时,for loop将迭代每行的每个单词添加计数器。

答案 1 :(得分:1)

我不认为你可以使用grep的多次调用来解决这个问题。因此我会选择(GNU grep):

<file grep -ow '\w+' | grep a | grep b | grep c

输出:

abc
cabby

第一个grep将每个单词放在一行。

答案 2 :(得分:0)

试试这个,它会起作用

sed&#39; s / / \ n / g&#39; test.txt | grep a | grep b | grep c

$ cat test.txt

abc abb cabby

$ sed&#39; s / / \ n / g&#39; test.txt | grep a | grep b | grep c

ABC 马车夫

希望这会有所帮助..