Я использовал команду wc -c для подсчета количества символов, но она выдала мне неправильное число, например количество символов плюс один:
echo "k" | wc -c
это дает мне 2 символа
так почему бы не 1?
решение1
Взгляните на сообщение справки для wc
. Эта -c
опция выводит количество символов. echo
Команда по умолчанию включает символ новой строки. Когда wc
она видит символ новой строки, она считает его другим символом и, следовательно, дополнительным числом в вашем результате. Вы можете обойти это, используя одну из альтернатив, показанных ниже; -w
подсчитывает количество слов и -l
подсчитывает количество строк.
echo "k" | wc -w
echo "k" | wc -l
Вы можете передать вывод to, wc
чтобы awk
получить количество символов, исключая символы новой строки:
wc <filename> | awk '{print $3-$1}'
По умолчанию при wc
отсутствии параметров выводится количество символов новой строки (от $1 до awk), количество слов и количество символов (от $3 до awk) в указанном порядке.
решение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