Wc -l дает неверный результат

Я получил неправильный результат из команды wc -l. После долгого:( проверяя найденный ядро ​​проблемы, вот симуляция:

$ echo "line with end" > file
$ echo -n "line without end" >>file
$ wc -l file
       1 file

здесь две строки, но отсутствует последняя "\n". Любое простое решение?

Ответ 1

В строке wc заканчивается "\n" char. Один из решений - grep-ing линий. Grep не ищет окончания NL.

например.

$ grep -c . file        #count the occurrence of any character
2

вышеуказанное не будет считать пустые строки. Если вы хотите, используйте

$ grep -c '^' file      #count the beginnings of the lines
2

Ответ 2

из man-страницы wc

 -l, --lines
              print the newline counts

сформировать справочную страницу echo

 -n     do not output the trailing newline

поэтому у вас есть 1 newline в вашем файле и, таким образом, wc -l показывает 1.

Вы можете использовать следующую команду awk для подсчета строк

 awk 'END{print NR}' file