在bash shell脚本中计算换行符

时间:2012-12-02 22:39:11

标签: bash shell

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

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

这只是一个较大的脚本的一小部分,它应该计算文件中的总单词,字符和行。我无法想象其中任何一个。请帮忙

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

2 个答案:

答案 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))