首页 > 解决方案 > 如何存储 awk 命令的输出,该命令是使用 shell 脚本程序从管道中获取输入到数组中的

问题描述

我正在尝试从管道获取输入并使用 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}' ) )

输出没有存储在数组中......它打印一个空数组。

标签: bashshellawk

解决方案


第一个解决方案没有意义,因为您正在设置awk变量 named array,而不是该名称的 bash 变量。

第二种解决方案的问题是,您将bash变量设置array在管道内。将其与此程序进行比较:

echo abc | x=( $(cat) )

在这里,x 也是空的。管道的接收端是一个子进程,x 将在这个子进程中设置。

为了实现您的目标,请使用

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

推荐阅读