我根本无法使用此脚本。我只是想在没有使用wc的情况下计算文件中的行数。这是我到目前为止所拥有的
FILE=file.txt
lines=0
while IFS= read -n1 char
do
if [ "$char" == "\n" ]
then
lines=$((lines+1))
fi
done < $FILE
这只是一个较大的脚本的一小部分,它应该计算文件中的总单词,字符和行。我无法想象其中任何一个。请帮忙
问题是if语句条件永远不会是真的..就好像程序无法检测到'\ n'是什么。
答案 0 :(得分: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"
答案 1 :(得分:1)
那里有两个问题。它们固定在以下内容中:
#!/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
开关({{ 1}}了解更多信息)。哦,你也想使用-r
选项(当你的文件中有反斜杠时,检查有没有。)
我改变了一些小问题:使用更健壮的[[...]]
,使用小写变量名称(使用大写变量名称被认为是不好的做法)。使用算术((++lines))
而不是愚蠢的lines=$((lines+1))
。