в bash вычислить строку char Я сделал этот пример ниже, но у меня он не работает Я пытаюсь
#!/bin/bash
file=$1
line=$2
v=0
if [ $# -ne 1 ]
then
echo "$0 fileName"
exit 1
fi
if [ ! -f $file ]
then
echo "$file not a file"
exit 2
fi
while read -n 1 c
do
l=$(echo $c | tr [:upper:] [:lower:])
[[ "$l" == "a" || "$l" == "e" || "$l" == "i" || "$l" == "o" || "$l" == "u" ]] && (( v++ ))
done < $file
echo "Characters : $(cat $file | wc -c)"
Я хочу, чтобы код подсчитывал что-то вроде символа или чего-нибудь в абзац, который я ему даю?
Я собираюсь кормить Вас с ложечки здесь и дать Вам ответ. Обещайте, что Вы изучите его для понимания и не просто вырежете и вставите.
Вы не должны читать символ файла символом. Это сделает, намного медленнее, и тяжелее определить, какая строка Вы идете. Если необходимо выполнить в этом просто оболочка: считайте файл линию за линией, и когда Вы находитесь на правильной строке, существует расширение параметра, которое возвращает длину значения.
#!/bin/bash
file=$1
lineno=$2
# ... validation here ...
nr=0
while IFS= read -r line; do
if (( ++nr == lineno )); then
printf "Line %d from file %s has %d characters" \
"$lineno" "$file" "${#line}"
break
fi
done <"$file"
Дальнейшее чтение:
Но конвейер общих инструментов, жеманничайте:
sed -n "$lineno {p;q}" "$file" | wc -c # this will count the newline
# or
awk -v n="$lineno" 'FNR == n {print length($0)}' "$file"