回答:
$ tr ' ' '\n' < FILE | grep WORD | wc -l
tr
スペースを改行で置換する場合、grep
WORDに一致するすべての結果の行をフィルタリングしwc
、残りの行をカウントします。
grep wc
の-c
オプションを使用してパーツを保存することもできます。
$ tr ' ' '\n' < FILE | grep -c WORD
この-c
オプションはPOSIXで定義されています。
単語間にスペースがあることが保証されない場合は、他の文字を(区切り文字として)使用して置換する必要があります。たとえば、代替tr
部品は
tr '"' '\n'
または
tr "'" '\n'
二重引用符または単一引用符を置き換える場合。もちろん、tr
複数の文字を一度に置き換えるためにも使用できます(異なる種類の空白や句読点を考えてください)。
prefixWORD、WORDsuffix、またはprefixWORDsuffixではなくWORDをカウントする必要がある場合、WORDパターンをbegin / end-of-lineマーカーで囲むことができます。
grep -c '^WORD$'
私たちの文脈では、これは単語開始/終了マーカーと同等です:
grep -c '\<WORD\>'
tr
。すべての状況で機能することのない例を提案するのではなく、ジョブを実行するコマンドを作成する方法を説明する必要があります。また、探している単語を含む単語と一致します。grep -o '\<WORD\>' | wc -l
ソリューションは、はるかに優れています。
GNU grepを使用すると、これは機能します。 grep -o '\<WORD\>' | wc -l
-o
各行の一致した各部分を別々の行に出力します。
\<
単語の始まりを表明し\>
、単語の終わりを\b
表明します(Perlの場合と同様)。これにより、単語の途中の文字列と一致しないことが保証されます。
例えば、
$ python -c 'これをインポート' | grep '\ <one \>' あるべき1、好ましくのみ- 1それを行うには--obvious方法。 名前空間は素晴らしいアイデアの1つです。それらをもっとやってみましょう。 $ python -c 'これをインポート' | grep -o '\ <one \>' one one one $ python -c 'import this' | grep -o '\ <one \>' | wc -l 3
grep -wo WORD | wc -l
残念ながら、これは GNU では機能しませんcoreutils
。
grep -o -c WORD file
プラットフォームで動作する場合、エレガントでかなり直感的なソリューションです。しかし、GNUの人々はまだ考えています。
grep
、GNU にはバグがあると言っています。結合のセマンティクスがPOSIXから明確-c
で-o
はないため、これは現在移植性がありません。コメントありがとうございます。この回答を更新しました。
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl
このコマンドは次のことを行います。
たとえば、最初のLinus Torvaldメッセージを分析する場合:
From:torvalds@klaava.Helsinki.FI(Linus Benedict Torvalds)ニュースグループ:comp.os.minix件名:minixで最も見たいものは何ですか?要約:新しいオペレーティングシステムの小規模な調査メッセージID:<1991Aug25.205708.9541@klaava.Helsinki.FI>日付:25 Aug 91 20:57:08 GMT組織:ヘルシンキ大学
みなさんこんにちはminixを使用して–
私は386(486)ATクローン用の(無料の)オペレーティングシステム(趣味であり、gnuのように大きくて専門的ではありません)を行っています。これは4月から醸造されており、準備を始めています。私のOSは多少似ているので、minixで人々が好き/嫌いなものについてのフィードバックが欲しいです(他のものの間でファイルシステムの物理的なレイアウト(実際的な理由のため)と同じです)。
現在bash(1.08)とgcc(1.40)を移植しましたが、うまくいくようです。これは、数か月以内に何か実用的なものを手に入れることを意味し、ほとんどの人がどんな機能を望んでいるかを知りたいと思います。どんな提案も歓迎しますが、私はそれらを実装することを約束しません🙂
Linus(torvalds@kruuna.helsinki.fi)
PS。はい。minixコードは一切なく、マルチスレッドfsがあります。protableではなく(386タスクの切り替えなどを使用)、ATハードディスク以外はサポートしません。
linus.txtという名前のファイルを作成し、コンテンツを貼り付けて、コンソールに書き込みます。
sed -e 's/[^[:alpha:]]/ /g' linus.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl
出力は次のようになります。
1 7 i
2 5 to
3 5 like
4 5 it
5 5 and
6 4 minix
7 4 a
8 3 torvalds
9 3 of
10 3 helsinki
11 3 fi
12 3 any
13 2 would
14 2 won
15 2 what
16 ...
最初の20単語のみを視覚化する場合:
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | head -n 20
コマンドtr 'AZ' 'a-z'はまだ UTF-8をサポートしていないため、外国語ではAPR soSという単語がaprÈsに翻訳されることに注意することが重要です。
1つの単語の出現のみを検索する場合は、最後にgrepを追加できます。
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | grep "\sword_to_search_for$"
search_freqというスクリプトで:
#!/bin/bash
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | grep "\s$1$"
スクリプトを呼び出す必要があります。
search_freq word_to_search_for
sed: -e expression #2, char 7: unterminated
「コマンド」、これもすべての単語をカウントしますよね?しかし、OPは特定のもののみを尋ねました。また、ちょっとした説明もいいでしょう。
JSONデータのキーまたは値の単語を一致させるかどうかに応じて、データからキーのみまたは値のみを抽出することができます。そうしないと、キーと値の両方として出現する単語が何度もカウントされる可能性があります。
すべてのキーを抽出するには:
jq -r '..|objects|keys[]' <file.json
これは、現在のものがオブジェクトであるかどうかを再帰的にテストし、オブジェクトである場合、キーを抽出します。出力は、1行に1つずつ、キーのリストになります。
すべての値を抽出するには:
jq -r '..|scalars' <file.json
これは同様の方法で機能しますが、手順は少なくなります。
次に、上記の出力をgrep -c 'PATTERN'
(キーまたは値に対してパターンgrep -c -w -F 'WORD'
を一致させるために)、または(キーまたは値内の単語を一致させるために)、または(キーまたは値全体grep -c -x -F 'WORD'
に一致させるために)または同様のものを介してパイプすることができますあなたのカウントを行います。
私はこのようなものでjsonを持っています:"number":"OK","number":OK"
1行で複数回繰り返されます。
私の簡単な「OK」カウンター:
sed "s|,|\n|g" response | grep -c OK
i以下のawkコマンドを使用して、出現回数を見つけました
サンプルファイル
猫のファイル1
praveen ajay
praveen
ajay monkey praveen
praveen boy praveen
コマンド:
awk '{print gsub("praveen",$0)}' file1 | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'
出力
awk '{print gsub("praveen",$0)}' file1 | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'
5
awk '{sum+=gsub("praveen","")} END {print sum+0}'
。
{ "key": "the key" }
、文字列をkey
1回または2回カウントする必要があるかどうかは不明です。