计算按特定顺序具有特定字母的单词数

时间:2013-12-25 06:31:37

标签: shell unix

如何计算在UNIX中按特定顺序具有特定字母的单词数

例如

如果我想查找字母a作为第二个字符的单词数

说实话,我不知道该怎么做

3 个答案:

答案 0 :(得分:1)

  

i want to find number of words that have letter a as second character

您可以像这样使用egrep来计算这些字数。

s='dabc foo bat cat bar blue red'
egrep -o '\<[A-Za-z]a[^ ]+\>' <<< "$s"|wc -l
       4

答案 1 :(得分:0)

awk '{for (i=1;i<=NF;i++) {if ($i ~/.a/) total=total+1}} END {print total}' file.txt

注意“。”匹配字段的第一个字符,所以a是第二个字符

答案 2 :(得分:0)

要匹配单词的第二个字母,模式应该是这样的:

  

START_OF_WORD LETTER1 LETTER2 LETTER3 ...

要匹配第二个字母“a”,那么根据工具,您需要一个如下的正则表达式:

\<.a\w*
\b.a\w*

那是:

  • \<(在grepvi)或\b(在`perl中)匹配“单词的开头”
  • .是任何字符,但不是\<后面的字符不可避免地是“字符”
  • a是字面意思“a”
  • \w*是零个或多个单词字符

给出示例文本:

  

你好abc bar xbar ba hello

本集中带有第二个字母“a”的2个单词是“bar”和“ba”。

以下是使用grepperl的解决方案:

s='hello abc bar xbar ba hello'
grep -o '\<.a\w*' <<< "$s" | wc -l
perl -ne 'print map("$_\n", m/\b(.a\w*)/g)' <<< "$s" | wc -l

如果该工具不支持\w\<\b符号,那么您可以将\w替换为您自己定义的“字符”,例如[a-zA-Z_],为了匹配单词的开头,您可以先将输入拆分为单词列表,awk默认情况下会这样做。使用awk的更准确版本的@user3114046解决方案:

awk '{for (i=1; i<=NF; ++i) {if ($i ~ /^.a/) c+=1}} END {print c}' <<< "$s"