Linux シェル wc -c 文字数を +1 にする

Linux シェル wc -c 文字数を +1 にする

文字数をカウントするために wc -c コマンドを使用しましたが、間違った数値が表示され、たとえば文字数に 1 が加算されます。

echo "k" | wc -c 

2文字になります

では、なぜ 1 ではないのでしょうか?

答え1

のヘルプ メッセージをご覧くださいwc-cオプションは文字数を出力します。echoコマンドにはデフォルトで改行文字が含まれます。 がwc改行文字を見つけると、別の文字としてカウントされるため、結果に追加のカウントが加算されます。これを回避するには、以下に示す代替方法のいずれかを使用します。-w単語数をカウントし、-l行数をカウントします。

echo "k" | wc -w 
echo "k" | wc -l

出力をパイプしてwcawk改行文字を除いた文字数を取得できます。

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

関連情報