ファイル内の空白文字の数を計算する方法は?

ファイル内の空白文字の数を計算する方法は?

ファイル内の空白文字の数を計算したいと思います。私が考えることができる最善は次のとおりです。

tr -cd [:space:] < my_file | wc

よりクリーンな方法はありますか?

答え1

tr -cd '[:space:]' < my_file | wc -m

動作します。ただし、GNUでは、tr文字ごとのシングルバイトロケール(通常はUTF-8ロケールでは機能しません)またはUTF-8ロケールのASCII入力でのみ機能します。

引用符がない場合は、[:space:]csh、tcsh、またはzshでエラーメッセージが表示されます(以下の条件が満たされない限り)、ほとんどのシェルは現在のディレクトリに、または:space[:space:]

また、wc文字はデフォルトでは計算されません(バイト、単語、および改行はオプションが指定されていない場合にのみ計算されます)。

GNUでは、awk次のことができます。

awk -v RS='[[:space:]]' 'END{print NR}'

例:

$ printf '\0\u2006\t\r\n' | awk -v RS='[[:space:]]' 'END{print NR}'
4

(U+2006の場合1人あたり6人が利用できるスペース、TAB、CR、およびNL文字はすべて、私のロケールで空白に分類されます。

答え2

#!/bin/bash

file=`cat $1`

length=`cat $1 | wc -m` // Count the charater
count=0
for ((i = 0 ;i < $length;i++)) do //loop to the end of the string

    if [ "${file:$i:1}" == "$2" ] //Look only character by character (select some characters of the String, (:$i:1) is the range of the choosen characters
    then
        count=$((count + 1))

    fi
done    
echo $count

//test.txt = "Is there a neater way?"
#./CountChar test.txt " "
>>> 4

これは「他の」方法です..x)、気に入ってほしい!

関連情報