Я хочу проверить отсутствие символов в файле, начиная с символа EOF. Может ли кто-нибудь сказать мне, как это сделать через оболочку script
Подсчет количества символов в файле через оболочку script
Ответ 1
Это будет сделано:
wc -c filename
Если вам нужен только счетчик без повторения имени файла на выходе:
wc -c < filename
Edit:
Используйте -m
для подсчета символа вместо байтов (как показано в ответе Себастьяна).
Ответ 2
#!/bin/sh
wc -m $1 | awk '{print $1}'
wc -m
подсчитывает количество символов; команда awk
печатает только количество символов, опуская имя файла.
wc -c
даст вам количество байтов (которое может отличаться от количества символов, так как в зависимости от кодировки у вас может быть символ, закодированный на несколько байтов).
Ответ 3
awk '{t+=length($0)}END{print t}' file3
Ответ 4
Чтобы получить точное количество символов в строке, используйте printf, в отличие от echo, cat, или запустите wc -c непосредственно в файле, потому что использование echo, cat и т.д. будет считать символ новой строки, что даст вам сумму символов, включая символ новой строки. Таким образом, файл с текстом "hello" будет печатать 6, если вы используете echo и т.д., Но если вы используете printf, он вернет точный 5, потому что нет элемента новой строки для подсчета.
Как использовать printf для подсчета символов внутри строк:
$printf '6chars' | wc -m
6
Чтобы превратить это в script, вы можете запустить текстовый файл для подсчета символов, сохраните следующее в файле print-character-amount.sh:
#!/bin/bash
characters=$(cat "$1")
printf "$characters" | wc -m
chmod + x в файле print-character-amount.sh, содержащий текст выше, поместите файл в свой PATH (то есть/usr/bin/или любой каталог, экспортированный как PATH в ваш .bashrc файл), затем выполните script в текстовом файле:
print-character-amount.sh file-to-count-characters-of.txt
Ответ 5
Только awk
awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file
только оболочка
var=$(<file)
echo ${#var}
Рубин (1.9 +)
ruby -0777 -ne 'print $_.size' file
Ответ 6
Проверяется следующая script и дает точно результаты, ожидаемые
\#!/bin/bash
echo "Enter the file name"
read file
echo "enter the word to be found"
read word
count=0
for i in \`cat $file`
do
if [ $i == $word ]
then
count=\`expr $count + 1`
fi
done
echo "The number of words are $count"
Ответ 7
Я бы подумал, что было бы лучше использовать stat
, чтобы найти размер файла, так как файловая система уже знает его, вместо того, чтобы заставить весь файл читать с помощью awk
или wc
- особенно если это файл с несколькими GB или один, который может быть нерезидентным в файловой системе на HSM.
stat -c%s file
Да, я признаю, что он не учитывает многобайтовые символы, но добавил бы, что ОП никогда не уточнял, является ли это проблемой/была проблема.