как сохранить выходные данные команды awk, которая принимает входные данные из pipe в массив, используя программу сценариев оболочки - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь взять входные данные из конвейера и сохранить указанный столбец входных данных в массив с помощью команды awk.Я работаю в среде UNIX sh

CMD=$1 #command which i am passing as an input.
C=$2  #column number which i want to store in array
array=
/usr/sbin/clido $CMD 2> /dev/null | awk "{array[NR]=\$$C}"

, а также попробовал следующую команду

/bin/clido $CMD 2> /dev/null | array=( $( awk -v i="$C" '{print $3}' ) )

вывод ничего не хранит в массиве ... он печатает пустой массив.

1 Ответ

0 голосов
/ 11 июля 2019

Первое решение не имеет смысла, потому что вы устанавливаете переменную awk с именем array, а не переменную bash с таким именем.

Проблема со вторым решением состоит в том, что вы устанавливаетепеременная bash array внутри трубы.Сравните это с этой программой:

echo abc | x=( $(cat) )

И здесь x будет пустым.Принимающий конец канала является дочерним процессом, и x будет установлен в этом дочернем процессе.

Для достижения цели используйте

array=( $(/bin/clido $CMD 2> /dev/null | awk -v i="$C" '{print $3}') ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...