Чтение файла и передача его в awk не выводит ожидаемых результатов - PullRequest
0 голосов
/ 07 февраля 2019

Если у меня есть файл test.txt, содержащий 3 строки;

1  
2   
3

Если я запусту

cat test.txt| while read a ; do awk -v c=$a '{print c}' ;done

Он напечатает эти значения.

1  
1

Но если я запускаю

cat test.txt| awk '{a=$0; print a}'
Он будет вести себя как ожидалось.

1  
2   
3

Любое объяснение?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Пусть awk читает из заданной переменной, а не из стандартного ввода.

seq 3 | while IFS= read -r a; do awk '{print}' <<<"$a"; done
0 голосов
/ 07 февраля 2019

В вашей первой версии 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

однако это довольно неэффективный способ ведения дел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...