文字数をカウントするために wc -c コマンドを使用しましたが、間違った数値が表示され、たとえば文字数に 1 が加算されます。
echo "k" | wc -c
2文字になります
では、なぜ 1 ではないのでしょうか?
答え1
のヘルプ メッセージをご覧くださいwc
。-c
オプションは文字数を出力します。echo
コマンドにはデフォルトで改行文字が含まれます。 がwc
改行文字を見つけると、別の文字としてカウントされるため、結果に追加のカウントが加算されます。これを回避するには、以下に示す代替方法のいずれかを使用します。-w
単語数をカウントし、-l
行数をカウントします。
echo "k" | wc -w
echo "k" | wc -l
出力をパイプしてwc
、awk
改行文字を除いた文字数を取得できます。
wc <filename> | awk '{print $3-$1}'
オプションなしの のデフォルト出力wc
では、改行文字数 (awk に対して $1)、単語数、文字数 (awk に対して $3) がこの順序で出力されます。
答え2
を実行するとecho "k"
、echo
コマンドは出力するように要求した内容に改行文字を追加します ("k")。-n
このオプションを無効にするには、次のオプションを使用します。
echo -n k | wc -c
1
それを見るために見えない文字の場合、ストリームをダンプするかod
、次のようにすることができますhd
。
echo k | od -t c
0000000 k \n
echo k | hd
00000000 6b 0a |k.|
echo k | od -t a -A n
k nl
答え3
これはecho
、文字列に改行を追加する を使用しているためです。printf
代わりに以下を使用してください。
$ echo k | wc -c
2
$ printf k | wc -c
1