Я пытаюсь создать сложную команду (используя подстановки оболочки и арифметические выражения), и мне было интересно, может ли кто-нибудь помочь мне понять вывод wc
команда.
Например, вот пара примеров:
[11:10:33] labreu:~ $ wc -l test.txt
5 test.txt
[11:10:40] labreu:~ $ cat test.txt| wc -l
5
Почему команда возвращает разные значения? Я пробовал посмотреть его справочную страницу, но там ничего об этом нет ...
Кстати, я спрашиваю об этом только потому, что пытался пропустить x строк файла с помощью следующей команды:
[11:25:35] labreu:~ $ tail -n "+$(( $(wc -l test.txt)-2 ))" test.txt
zsh: bad math expression: operator expected at `test.txt-2...'
Заметив, что wc
возвращает number_of_lines filename
и что использование каналов (или перенаправление дает другой результат), мне удалось получить то, что мне нужно, используя что-то вроде этого:
tail -n "+$(( $(wc -l<test.txt )-2 ))" test.txt
tail -n "+$(( $(cat test.txt | wc -l )-2 ))" test.txt
В любом случае, остается главный вопрос: почему команда wc
возвращает другой вывод при использовании в конвейере (или с перенаправлением ввода)?
Спасибо