To find number of occurrences of a word taken as i

2019-03-04 14:31发布

问题:

For the file file1.txt which contains

Apple fruit Apple tree
Tree AApple AApklle Apple apple
TREE
Apple

I want to find number of occurrences of the word Apple. Output should be 4.
My script.sh file contains

#!/bin/bash
FILE="$1"
TOFIND="$2"
if [ -f "$FILE" ];
then
grep -o '\<"$TOFIND"\>' "$FILE" | wc -l
fi

When I try using

bash script.sh file1.txt Apple

The output shows 0. Please help solve this problem.

回答1:

You can change the grep line to:

grep -o '\<'"$TOFIND"'\>' "$FILE" | wc -l

or just:

grep -o "\<$TOFIND\>" "$FILE" | wc -l

Then it will work. It's because the quotes, your double quotes was quoted inside single quotes, so they are not expanded.



回答2:

One in awk:

$ awk -v w="Apple" 'BEGIN{RS="( |\n)+"}{c+=($1==w)}END{print c}' file
4

Explained:

$ 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)+" is tested to work on gawk, mawk and Busybox awk, it failed to work on Debian's original-awk. RS="[[:space:]]+" tested to work on gawk only.



回答3:

With GNU awk for multi-char RS:

$ awk -v RS='\\<Apple\\>' 'END{print (NR ? NR-1 : 0)}' file
4

or with a shell variable:

$ tofind='Apple'
$ awk -v RS='\\<'"$tofind"'\\>' 'END{print (NR ? NR-1 : 0)}' file
4