2

我根本无法让这个脚本工作。我只是想在不使用 wc 的情况下计算文件中的行数。这是我到目前为止所拥有的

FILE=file.txt
lines=0
while IFS= read -n1 char
do
if [ "$char" == "\n" ]
then
lines=$((lines+1))
fi
done < $FILE

这只是一个更大的脚本的一小部分,它应该计算文件中的总字数、字符和行数。我无法弄清楚。请帮忙

问题是 if 语句条件永远不会为真。就好像程序无法检测到 '\n' 是什么。

4

2 回答 2

2

你有两个问题。它们固定在以下位置:

#!/bin/bash
file=file.txt
lines=0
while IFS= read -rN1 char; do
if [[ "$char" == $'\n' ]]; then
    ((++lines))
fi
done < "$file"

一个问题是$'\n'在测试中,另一个更微妙的是,您需要使用-N开关,而不是-n读取中的那个(help read更多信息)。哦,您还想使用该-r选项(当您的文件中有反斜杠时,请检查是否有反斜杠)。

我改变的小事:使用更健壮[[...]]的小写变量名(使用大写变量名被认为是不好的做法)。用算术((++lines))代替傻lines=$((lines+1))

于 2012-12-02T23:14:42.753 回答
2
declare -i lines=0 words=0 chars=0
while IFS= read -r line; do
    ((lines++))
    array=($line)               # don't quote the var to enable word splitting
    ((words += ${#array[@]}))
    ((chars += ${#line} + 1))   # add 1 for the newline
done < "$filename"
echo "$lines $words $chars $filename"
于 2012-12-03T02:14:24.443 回答