如何计算在UNIX中按特定顺序具有特定字母的单词数
例如
如果我想查找字母a
作为第二个字符的单词数
答案 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*
那是:
\<
(在grep
和vi
)或\b
(在`perl中)匹配“单词的开头”.
是任何字符,但不是\<
后面的字符不可避免地是“字符”a
是字面意思“a”\w*
是零个或多个单词字符给出示例文本:
你好abc bar xbar ba hello
本集中带有第二个字母“a”的2个单词是“bar”和“ba”。
以下是使用grep
和perl
的解决方案:
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"