「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
」でしょうか。