web-dev-qa-db-ja.com

プレーンテキストファイル内の文字の出現をカウントする

Linux/terminalで、プレーンテキストファイルでchar fが何回発生するかをカウントする方法はありますか?

125
cupakob

これはどう:

fgrep -o f <file> | wc -l

注:覚えやすく、複製してカスタマイズするのがはるかに簡単であることに加えて、これはVerebの答えよりも約3倍(申し訳ありませんが、編集してください!最初のテストは失敗しました)高速です。

173
Cascabel

さらに高速:

tr -cd f < file | wc -c

このコマンドの時間 4.9 MBのファイルで、検索された文字が1100000回出現する場合:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

同じファイルに対してechocattrおよびbcを使用したVereb回答の時間:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

同じファイルに対してtrsedおよびwcを使用してRob Hruskaが回答する時間:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

Jefromiが同じファイルに対してfgrepwcで答える時間:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
62
user1985553
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

ここで、Aは文字です

4.9 MBのファイルでこのコマンドを実行し、検索文字が1100000回出現する時間:

real   0m0.168s
user   0m0.059s
sys    0m0.115s
8
Vereb

あなたがする必要があるのがあなたのキャラクターを含む行の数を数えることだけなら、これは動作します:

grep -c 'f' myfile

ただし、同じ行での 'f'の複数の出現は、単一の一致としてカウントされます。

6

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

「A」の2つの出現をキャラクターに置き換え、「file」を入力ファイルに置き換えます。

  • tr -d '\n' < file:改行を削除します
  • sed 's/A/A\n/g:「A」が現れるたびに改行を追加します
  • wc -l:行数をカウントします

例:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
4
Rob Hruska