ファイルの行数を数えるのは「wc -l file」ではありません

wc -l file」が数えるのは行数ではなく改行数なので、ファイルの末尾が改行でない場合、行数よりも1少ない結果が返ります(GNU wc・BSD wcともに)。

4行(空行を無視すると2行)からなるファイルfooを作って確かめます。UbuntuのshのechoやBSD echo(Macの/bin/echo)ではなく、bashのechoを使ってください。

#!/bin/bash
echo -en '123\n\n\n3' > foo
wc -l foo
cat foo | wc -l
awk 'END{print NR}' foo
grep . foo | wc -l
grep '' foo | wc -l

結果は下のとおり。

3 foo
3
4
2
4

行数を数えたいときは「grep '' file|wc -l」や「awk 'END{print NR}' file」、空行を無視したいときは「grep . file|wc -l」でしょうか。

続き:ディレクトリ内のテキストファイルの総行数を求めるには