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


132

linux / terminalでカウントする方法はありますか?char fがプレーンテキストファイルで何回出現するのですか?


9
技術的には、これはsh / bashなどと考えることができます。プログラミングの質問なので、どちらの場所でも有効だと思います。
Rob Hruska、

@Rob Hruska:はい、私もbashプログラミングだと思います... @abrashka:最初と2番目の質問の答えは「いいえ」です!
cupakob 2009年

回答:


178

これはどう:

fgrep -o f <file> | wc -l

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


\rまたは\n文字を数える必要がある場合、これは機能しません。tr -cd f答えはそのための作業を行います。
bjnord 2013年

3
例えば、いくつかの文字を、カウントするabそしてc、使用egrepegrep -o 'a|b|c' <file> | wc -l
Skippy le Grand Gourou 2017

また、回答のwc -cように使用しないように注意してください。行ごとに出力されるtrためgrepwc行末を文字としてカウントします(したがって、文字数が2倍になります)。
Skippy le Grand Gourou 2017

@bjnord OKですが\r\nなぜ使用しないのかを数えるにはwc -l
Skippy le Grand Gourou 2017

67

さらに高速:

tr -cd f < file | wc -c

検索された文字が4.9 MBおよび1100000回出現するファイルを使用したこのコマンドの実行時間

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

Verebの答えのための時間とechocattrおよびbc同一ファイルについて:

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

ロブHruskaの応答時間trsedおよびwc同一ファイルについて:

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

Jefromi応答のための時間fgrepwc同じファイルについて:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 

3
いくつかの文字、例えばカウントするようにabc:をtr -cd abc < file | wc -l
Skippy le Grand Gourou 2017

本気ですか?tr -cd abc < file | wc -c代わりに想定されていなかった
Mithun B

10
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

1
これは、不要なcatsを削除し、ファイル名をとに引数として指定するwcと、約3分の1速くなりますtr
カスカベル

1
本当に最適化したい場合は、ファイルを1回だけ読み取ります。echo $(stat -c%s <file>)-$(cat <file> | tr -d 'A' | wc -c)| bc
ベレブ2009年

@Vereb -のみ読み込みTR stdinが、それがなく、パイプすることができcat編:tr -d 'A' < <file> | wc ...
DSZ

7

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

grep -c 'f' myfile

ただし、同じ行での「f」の複数の出現を1回の一致としてカウントします。


4

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.