Bash 命令检查文件中包含字母“a”的单词数
答案1
假设我们有这个测试文件:
$ cat file
the cat in the hat
the quick brown dog
jack splat
通过grep
采用 GNU-o
扩展的实现,我们可以检索包含以下内容的所有单词a
:
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file
cat
hat
jack
splat
我们可以数一下这些词:
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file | wc -l
4
答案2
POSIXly:
<file tr -s '[:space:]' '[\n*]' | grep -c a
这里,字是非空格字符的序列。
答案3
这是 Perl 的方式:
perl -0lnE 'say scalar grep(/a/,split(/\s/,$_));' file
还有一个awk
办法:
awk '{for(i=1;i<=NF;i++){if($(i)~/a/){k++}}}END{print k}' file
答案4
awk 'BEGIN{RS="[[:space:][:punct:]]"; c=0}
index($0,"a"){c++}
END{print c}'
awk
使用支持多字符的版本右埃科德S分隔符 ( RS
),例如GNU awk,您可以让awk
每条记录读取一个单词。
在该记录中,index(in, string)
函数搜索in
对于第一次出现的string
,并返回1 为基础找到它的字符位置。如果没有找到则index()
返回0。因此,返回值可以被视为布尔条件测试(0 = false,而不是零 = true)。请注意,这不是正则表达式搜索。
如果找到匹配项,则变量c
加 1 ( c++
)
c=0
块中需要,BEGIN{}
因为 whenc
永远不会递增 - 这会导致c
benull
代替0
。处理这个问题的另一种方法是print 0+c
(在END{}
块中)