如何使用awk在bash中查找字符串中的字符

Pul*_*pit 2 bash awk

我有一个char名为 的变量sign和一个给定的字符串sub。我需要找出它sign在 中出现了多少次sub并且无法使用grep

例如:

sign = c

sub = mechanic cup cat

echo "$sub" | awk <code i am asking for> | wc -l
Run Code Online (Sandbox Code Playgroud)

输出应该是4因为c出现了 4 次。<>里面应该包含什么?

Fre*_*ddy 5

sign=c
sub='mechanic cup cat'

echo "$sub" |
  awk -v sign="$sign" -F '' '{for (i=1;i<=NF;i++){if ($i==sign) cnt++}} END{print cnt}'
Run Code Online (Sandbox Code Playgroud)

编辑:

评论中要求的更改:

  1. 测试 的长度是否sign为 1(不=存在)。如果为 true,请将sign和更改sub为小写以忽略大小写。
  2. 用于${sign:0:1}仅将第一个字符传递给awk

sign=c
sub='mechanic Cup cat'

if [ "${#sign}" -eq 1 ]; then
  sign=${sign,,}
  sub=${sub,,}
fi

echo "$sub" |
  awk -v sign="${sign:0:1}" -F '' '{for (i=1;i<=NF;i++){if ($i==sign) cnt++}} END{print cnt}'
Run Code Online (Sandbox Code Playgroud)