将awk的结果放入数组中

时间:2014-01-15 06:22:36

标签: bash shell scripting awk ksh

当我在终端上运行以下命令时,

awk /984/ $files | awk -F, '{OFS=",";print $1,$4,$17}'

其中,

files=`ls`

我得到了这个输出:

2013/08/18 12:51:37,11,724
2013/08/18 12:48:02,227,84769

我希望创建一个脚本,运行该命令并以这种方式将上述结果分配给数组:(将行分隔为单独的元素)

array[0] = 2013/08/18 12:51:37,11,724
array[1] = 2013/08/18 12:48:02,227,84769

,但

既不,

result=($(awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'))

也不,

result2=`awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'`

实现了我的目的。

如何获得像我指定的数组?

3 个答案:

答案 0 :(得分:3)

当你说:

result=($(awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'))

输出将按空格分割。将IFS设置为换行符,您应该会看到所需的结果。说:

IFS=$'\n' result=($(awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'))

而是将输出的不同捕获到数组中。

答案 1 :(得分:1)

要将变量存储在数组中,输出必须采用以下格式:

result=$(one two "more data")
echo ${result[2]}
more data

以空格分隔的数据。因此,请调整输出以提供该格式。

你能举例说明你的成就:

awk '/984/' $files | awk -F, '{OFS=",";print $1,$4,$17}'

可能缩短为:

awk -F, '/984/ {OFS=",";print $1,$4,$17}' $files

答案 2 :(得分:0)

我认为问题出在脚本中使用()。 我尝试了一个类似的例子并获得了所需的输出

myarray=(`ls *.sh`)
for f in ${myarray[@]} 
do
    echo $f
done

我认为您的代码应更改如下

result=(`awk /string/ $files | awk -F, '{OFS=",";print $1,$4,$17}'`)