5

例として以下のコンテンツを取り上げましょう

    This file is a test file 
    this file is used to count the word 'file' in this test file
    there are multiple occurrences of word file in some lines in this test file

上記の内容で「ファイル」という単語を数えたい。

以下のシェルコマンドを使用しています

   cat $filename |  sed "s/_/new/g" | sed "s/$word/_/g" | tr -c -d _ |wc -c

それは大丈夫ですか、それとももっと良いアイデアですか..?

4

11 に答える 11

9

単語を区切るためにtrを使用し、次にgrepとwcを使用することは可能のようです:

tr -s ' ' '\n' < file.txt | grep file | wc -l
于 2012-08-06T16:40:32.450 に答える
6
grep $word $filename -o | wc -l
于 2012-08-06T16:38:55.527 に答える
5
grep -cow "$word" "$filename"

この-cオプションは、カウントを報告することを指定します。

この-oオプションは、一致する行の数だけでなく、各オカレンスをカウントするように指定します。

この-wオプションは、単語の一致のみをカウントするように指定します。つまり、「ファイル」や「プロファイル」などの部分的な一致はカウントしません。

残念ながら、とを組み合わせると、の一部のバージョンがgrep正しく機能しません。そのバグがある場合は、@Nykakinの答えが適切な回避策です。-c-o

補間された変数の適切な引用にも注意してください。

于 2012-08-06T16:38:29.303 に答える
0

tr コマンドを使用して投票された解決策のいくつかは、「filefile」のようなリンクされた単語がある状況を処理できませんでした。Perlを使用した私のソリューションは次のとおりです。

perl -p -e s/file/file\\n/g $filename | grep -c file

-p は、ループを実行して出力をエコーするように perl に指示します。-e は、1 行のプログラムが次に来ることを指定します。

于 2013-01-26T01:02:03.417 に答える
0
cat $filename | tr -s ' ' '\n' | grep -c $word
于 2012-08-06T16:42:14.313 に答える
0

awkまたはですべてperl実行でき、間違いなく削除できますcat(sedはファイル名でも機能します)。grep1 行に 1 つの一致しかカウントされないため、それ自体は使用できません。

$ sed "s/_/new/g" delmememetest | sed "s/$word/_/g" | tr -c -d _ |wc -c
7
$ grep -c file delmememetest
3

grep を便利にするために、別のファンキーなアプローチを試してみましょう。

$ sed "s/${word:0:1}/\n&/g" delmememetest | grep -c "$word"
7

検索語の最初の文字と同じ各文字の前に改行を挿入します。そうすれば、1 行に 1 つの一致のみがカウントに干渉しません。GNU の最新バージョンを使用している場合、別の回答で使用されgrepている-oオプションで同じことが保証されます。

いずれにせよ、一致するパターンが just ではないこと、$wordまたは同じルートを持つ単語が一致することを確認してください (または-wスイッチを使用します)。

于 2012-08-06T16:43:51.547 に答える
0

...私はそれをシンプルに保つのが好きです:

grep $string /file/name |wc -l

また

cat /file/name |grep $string |wc -l
于 2014-01-06T20:32:23.747 に答える
-2

コード:

   count=0;
    for i in `cat $filename`;
        do if [ $i == "file" ];
    then ((count++))fi $i; 
    done;
    echo $count;
于 2013-02-20T08:46:59.000 に答える