对于其中包含的文件file1.txt
Apple fruit Apple tree
Tree AApple AApklle Apple apple
TREE
Apple
我想找到单词Apple
的出现次数。输出应为4
。
我的script.sh文件包含
#!/bin/bash
FILE="$1"
TOFIND="$2"
if [ -f "$FILE" ];
then
grep -o '\<"$TOFIND"\>' "$FILE" | wc -l
fi
当我尝试使用
bash script.sh file1.txt Apple
输出显示0
。请帮助解决此问题。
答案 0 :(得分:1)
awk中的一个:
$ awk -v w="Apple" 'BEGIN{RS="( |\n)+"}{c+=($1==w)}END{print c}' file
4
解释:
$ awk -v w="Apple" ' # search word as parameter
BEGIN {
RS="( |\n)+" # set record separator to separate words
# RS="[[:space:]]+" # where available
}{
c+=($1==w) # count searched words
}
END { # in the end
print c+0 # output count
}' file
RS="( |\n)+"
经过测试可在gawk,mawk和Busybox awk上运行,但无法在Debian的原始awk上运行。 RS="[[:space:]]+"
经测试仅适用于gawk。
答案 1 :(得分:1)
使用GNU awk进行多字符RS:
$ awk -v RS='\\<Apple\\>' 'END{print (NR ? NR-1 : 0)}' file
4
或带有shell变量:
$ tofind='Apple'
$ awk -v RS='\\<'"$tofind"'\\>' 'END{print (NR ? NR-1 : 0)}' file
4
答案 2 :(得分:0)
您可以将grep行更改为:
grep -o '\<'"$TOFIND"'\>' "$FILE" | wc -l
或者只是:
grep -o "\<$TOFIND\>" "$FILE" | wc -l
然后它将起作用。这是因为双引号,双引号都在单引号内引起来,所以它们不会扩展。