количество символов в bash [закрыто]

в 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)"

Я хочу, чтобы код подсчитывал что-то вроде символа или чего-нибудь в абзац, который я ему даю?

1
задан 28 March 2019 в 18:53

1 ответ

Я собираюсь кормить Вас с ложечки здесь и дать Вам ответ. Обещайте, что Вы изучите его для понимания и не просто вырежете и вставите.

Вы не должны читать символ файла символом. Это сделает, намного медленнее, и тяжелее определить, какая строка Вы идете. Если необходимо выполнить в этом просто оболочка: считайте файл линию за линией, и когда Вы находитесь на правильной строке, существует расширение параметра, которое возвращает длину значения.

#!/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"
3
ответ дан 3 December 2019 в 07:21

Другие вопросы по тегам:

Похожие вопросы: