Linux/terminalで、プレーンテキストファイルでchar fが何回発生するかをカウントする方法はありますか?
これはどう:
fgrep -o f <file> | wc -l
注:覚えやすく、複製してカスタマイズするのがはるかに簡単であることに加えて、これはVerebの答えよりも約3倍(申し訳ありませんが、編集してください!最初のテストは失敗しました)高速です。
さらに高速:
tr -cd f < file | wc -c
このコマンドの時間 4.9 MBのファイルで、検索された文字が1100000回出現する場合:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
同じファイルに対してecho
、cat
、tr
およびbc
を使用したVereb回答の時間:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
同じファイルに対してtr
、sed
およびwc
を使用してRob Hruskaが回答する時間:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Jefromiが同じファイルに対してfgrep
とwc
で答える時間:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
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
あなたがする必要があるのがあなたのキャラクターを含む行の数を数えることだけなら、これは動作します:
grep -c 'f' myfile
ただし、同じ行での 'f'の複数の出現は、単一の一致としてカウントされます。
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