質問
私は使用しました:
tr -dc [:alpha:] < $fileDoc | wc -c
.
すべての文字を数える、
tr -dc ' ' < $fileDoc | wc -c
.
すべてのスペースを数える、
tr -dc '\n' < $fileDoc | wc -c
.
テキスト文書内のすべての新しい行を数える。
私が今やりたいことは、私が他のすべてのものを呼び出すように、文書内の他のすべての文字を数えることです。
これは文書からのテキストです:
こんにちはこれはテストテキスト文書です。
123
!@#
.
[:alpha:]
、、
\n
をすべて削除する方法は見つけられ、残りの文字を数えますか?
解決
これはトリック
をするべきですtr -d '[:alpha:] \n' < $fileDoc | wc -c
.
またはおそらく、空白の定義にタブを含める場合は
tr -d '[:alpha:][:space:]' < $fileDoc | wc -c
.
OPのコメントに基づいて、アルファベット順、スペース、数字、および新規範囲を削除し、残りのすべての文字を数えるには、
tr -d '[:alnum:][:space:]' < $fileDoc | wc -c
.
[:alnum:]
はアルファベットと数字の文字を占めています。[:space:]
は、Newlines
他のヒント
参照のためにここに投稿するだけで、このawk
スクリプトを一時的にしたい場合は、次のように動作する必要があります。
awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
.
$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot
.
$ awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4
. 所属していません StackOverflow