Файл, который вы вводите cat
, содержит две строки ввода, тогда как поток, который вы передаете с echo
, - только одна строка.
Если вы измените echo
s на эквивалентные, как в:
{ echo 2017; echo 2018; } | awk '{ print 6 }'
... вы получите те же две строки вывода.
Здесь следует помнить, что сценарий awk
состоит из кусочков общего вида PATTERN { BLOCK }
, где PATTERN определяет, будет ли выполняться БЛОК и когда. (Оба из них являются необязательными: шаблон по умолчанию должен выполняться для каждой строки; блок по умолчанию - { print $0 }
, чтобы напечатать текущую строку полностью).
Когда у вас просто есть { print 6 }
, вы сохраняете шаблон по умолчанию (который должен запускать этот блок для каждой строки ввода). Следовательно, когда вы вводите две строки ввода, { print 6 }
запускается дважды.