В вашей первой версии awk
не получает стандартный ввод, как вы предполагали.
Копирование из комментария @William Purcell: «Команда read читает первую строку ввода, а awk читает следующие 2 (2 и 3). Вот почему вы видите две строки вывода».
Для следующих двух строк вы инициализировали переменную c
с 1
(с первого чтения).
Если вы заключите свой оператор в блок BEGIN
, он будет работать как задумано.
$ seq 3 | while IFS= read -r a; do awk -v c="$a" 'BEGIN{print c}'; done
однако это довольно неэффективный способ ведения дел.