Подсчет количества символов в файле через оболочку script

Я хочу проверить отсутствие символов в файле, начиная с символа EOF. Может ли кто-нибудь сказать мне, как это сделать через оболочку 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

Да, я признаю, что он не учитывает многобайтовые символы, но добавил бы, что ОП никогда не уточнял, является ли это проблемой/была проблема.