ファイルやシェル変数からアルファベット文字を計算するより良い/簡単な方法を見つけようとしています。

ファイルやシェル変数からアルファベット文字を計算するより良い/簡単な方法を見つけようとしています。

次のテキストを含むファイルがあります。

we are going to write something 1 2 3

wc9つの単語と38文字の1行があると教えてください。

a-z26文字(、数字やスペースを除くなど)のみを計算したいと思います。

これが私の現在のソリューションです。

grep -o [[:alpha:]] filename | wc -l

コマンドラインでこれを行う「より良い」方法があるかどうかを知りたいです。

答え1

アルファベット以外の文字をすべて削除し、tr結果の文字数を計算します。trソリューションとあなたのソリューションの両方を組み込みソリューションbashに渡すと、timeこのtrソリューションが少なくとも私のシステムでは約5倍速いことがわかります。

tr -cd '[:alpha:]' <filename | wc -m

答え2

awkこの問題を解決するためにも使用できます!

awk '{c+=gsub(s,s)}END{print c}' s='[[:alpha:]]' filename

答え3

努力する:

LC_ALL=C grep -o [[:alpha:]] | sort -u | wc -l

LC_ALL=C.UTF-8自分の言語に合わせてロケールを変更してください[a-zA-Z]

関連情報