Bash 中的字符数

Bash 中的字符数

在 bash 中计算行字符我做了下面这个例子但它对我来说不起作用我尝试

#!/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

我会亲自告诉你答案。保证你会认真学习并理解,而不是只是复制粘贴。

您不需要逐个字符地读取文件。这会使速度慢得多,并且更难确定您在哪一行。如果您只需要在 shell 中执行此操作:逐行读取文件,当您在正确的行上时,有一个参数扩展会返回值的长度。

#!/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"

相关内容