в tmp
Я набираю один символ, но wc -c
показывает 2
,Зачем?
Потому что новые строки - это тоже символы. Скажите текстовому редактору не добавлять его в конец файла. Нет, не знаю как.
Один из способов - tr
чтобы удалить новые строки, вы можете подсчитать символы.
Стандартное поведение:
echo HELLO | wc -m
# result: 6
echo -n HELLO | wc -m
# result: 5
Чтобы показать количество найденных символов новой строки:
echo HELLO | wc -l
# result: 1
echo -n HELLO | wc -l
# result: 0
Удалите символ новой строки и подсчитайте символы:
echo HELLO | tr -d '\n' | wc -m
# result: 5
Удалите символ новой строки (и возможные возвраты с помощью \r
) и подсчитываем символы для входного файла:
tr -d '\n\r' < input.txt | wc -m
Я использовал для своих расчетов предложение, аналогичное предложению the-wabbit.
В качестве обходного пути вы можете подсчитать новые строки с помощью wc -l и вычесть их из счетчика wc -c.
function num_chars () {
# echo -e tells echo to honor certain sequences like \n
chars=$(echo -e "${1}" | wc -c)
lines=$(echo -e "${1}" | wc -l)
real_chars=$(echo "$chars - $lines" | bc)
echo "$real_chars"
}
num_chars "hello Dolly"
11 #Result
num_chars "hello
dolly"
11 #Result
num_chars "hello \nDolly"
11 #Result