当我在终端上运行以下命令时,
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}'`
实现了我的目的。
如何获得像我指定的数组?
答案 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}'`)