On Tue, 7 Sept 2021 at 11:35, Bernhard Voelker <m...@bernhard-voelker.de> wrote: > On 9/5/21 07:37, Peng Yu wrote: > > I got 1 instead of 2 in the following example. How to count the last > > even when it does not end with a newline character? Thanks. > > > > $ printf 'a\nb'|wc -l > > 1 > > A text file (in contrast to a binary file) must end on a newline character, > otherwise the remainder after the last '\n' in the file is not an entire line. > > And that's what wc(1) effectively does (and says so in its man page): > > wc - print newline, word, and byte counts for each file > ___________^^^^^^^_________________^^^^^^ > > If you'd like to treat the remainder as a line, then you have to add > a newline character at the end. > > $ printf 'a\nb\n' | wc -l > 2
Maybe it is worth to mention that the wc(1) is counting lines POSIX correctly. Number of the lines is number of valid lines, excluding incomplete lines. 3.206 Line A sequence of zero or more non- <newline> characters plus a terminating <newline> character. 3.195 Incomplete Line A sequence of one or more non- <newline> characters at the end of the file. Above definitions are from the web page below. https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html -- Sami Kerola http://www.iki.fi/kerolasa/