最後に改行がある場合は以下の通り問題ない。 $ printf 'test\ntest\n' test test $ printf 'test\ntest\n' | wc -l 2 wc -lは改行の数を数えるため、最後に改行がないと本当の行数より1少ない数を返してしまう。 $ printf 'test\ntest' test test$ $ printf 'test\ntest' | wc -l 1 対策としては、grep -c ''で空文字に合致する行数を求めることで代用したり、awkのENDとNRを活用したり、sedの現在の行数を出力する=と最終行$を活用したりする方法がある。 $ printf 'test\ntest' | grep -c '' 2 $ printf 'test\ntest' | awk 'END{print NR}' 2 $ printf 'test\ntest'
![wc -lでは文末に改行がないファイルの行数を正しく数えられない - grep Tips *](https://cdn-ak-scissors.b.st-hatena.com/image/square/52fe056c97dfc2c7003b5b0271c127e7db83650b/height=288;version=1;width=512/https%3A%2F%2Fwww.greptips.com%2Fimages%2Fogp%2F1216.png)