-cвариантом является количество байт, а не количество символов
mcalex
1
-m, --chars вывести количество символов. Я также использовал эту же проблему
Мохаммад Карми
Вы правы, я думал, что уникод был два байта на символ, но кажется, что буквы ASCII в универе по-прежнему 1 байт. Любопытно. Я думаю, что EOL
mcalex
1
да, я набрал "k" в файле, и он показывает 2 символа, я удалил его, поэтому он показывает 0 любопытных
Мохаммад Карми
Ответы:
19
Посмотрите на справочное сообщение для wc. -cОпция выводит количество символов. Команда echoвключает символ новой строки по умолчанию. Когда wcвидит новую строку, он считается как другой символ и, следовательно, дополнительный счет в вашем результате. Вы можете обойти это, используя одну из альтернатив, показанных ниже; -wподсчитывает количество слов и -lподсчитывает количество строк.
echo "k" | wc -w
echo "k" | wc -l
Вы можете передать вывод команды wcto, awkчтобы получить количество символов, исключая символы новой строки:
wc <filename> | awk '{print $3-$1}'
Вывод по умолчанию wcбез параметров выводит количество символов новой строки (от $ 1 до awk), количество слов и количество символов (от $ 3 до awk) в этом порядке.
хорошо, так что есть одно слово и одна строка, но OP хочет знать, почему есть два символа / байта
mcalex
Я хочу посчитать количество символов, а не слов или строк
Мохаммад Карми
5
аааа, так ты имеешь в виду echo -n "k" | wc -c. Это имеет смысл
mcalex
Я положил символ в файл, и он дает так, что EOF считается? или новая строка или как ?, поскольку я хочу сосчитать более одного символа
Мохаммад Карми
2
@ user1865719: printfчасто предпочитается раньше, echoкогда важна согласованность. Он не печатает новую строку, если не задан конкретный вопрос , т.е. printf "k" | wc -mдает 1количество напечатанных символов. Чтобы подсчитать символы в первой строке файла, можно сделать, например, $(($(head -1 file | wc -m)-1))(обернуть его, $(())чтобы выполнить арифметику оболочки, чтобы удалить счетчик новой строки) или, что еще лучше: использовать awk и do awk 'NR==1{print length}' file.
Даниэль Андерссон
12
когда вы 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
-c
вариантом является количество байт, а не количество символовОтветы:
Посмотрите на справочное сообщение для
wc
.-c
Опция выводит количество символов. Командаecho
включает символ новой строки по умолчанию. Когдаwc
видит новую строку, он считается как другой символ и, следовательно, дополнительный счет в вашем результате. Вы можете обойти это, используя одну из альтернатив, показанных ниже;-w
подсчитывает количество слов и-l
подсчитывает количество строк.Вы можете передать вывод команды
wc
to,awk
чтобы получить количество символов, исключая символы новой строки:Вывод по умолчанию
wc
без параметров выводит количество символов новой строки (от $ 1 до awk), количество слов и количество символов (от $ 3 до awk) в этом порядке.источник
echo -n "k" | wc -c
. Это имеет смыслprintf
часто предпочитается раньше,echo
когда важна согласованность. Он не печатает новую строку, если не задан конкретный вопрос , т.е.printf "k" | wc -m
дает1
количество напечатанных символов. Чтобы подсчитать символы в первой строке файла, можно сделать, например,$(($(head -1 file | wc -m)-1))
(обернуть его,$(())
чтобы выполнить арифметику оболочки, чтобы удалить счетчик новой строки) или, что еще лучше: использовать awk и doawk 'NR==1{print length}' file
.когда вы
echo "k"
,echo
команда добавляет символ новой строки к тому, что вы попросили его распечатать («k»). Вы можете использовать-n
опцию, чтобы отключить это:Для просмотра этого невидимого персонажа, вы можете сбросить поток ти
od
илиhd
:источник
Это потому, что вы используете
echo
, что добавляет новую строку к вашей строке. Используйтеprintf
вместо этого:источник