通常把awk执行的结果直接赋值给某个变量然后对该变量进行操作。当需要同时输出多个值时,却没有好的方法同时赋给多个变量,以下只是变通的方法。
1. 直接用while read 重定向到多变量,但是得到的变量只在循环范围内有效
#/usr/bin/env bash
echo $(seq 1 9) | awk '{ print $5,$6,$7}' | while read a b c
do
echo -n "Loop times: "
echo $a $b $c
rep=$(ls -l $0|column -t)
echo "$rep" | sed -n 's/\([^ ]*\) \([^ ]*\) \([^ ]*\) \(.*\)/\1'"[${a}]"'\2'"[${b}]"'\3'"[${c}]"'\4/p'
done
echo $a $b $c
ps: while 循环执行一次,通过赋值得到的变量$a,$b,$c只在循环内有效
2. 通过循环和数组进行变相赋值
#!/usr/bin/env bash
declare -a array
idx=0
for elt in $( echo $(seq 1 9) | awk '{ print $2,$3,$4,$5,$6,$7}')
do
array[$idx]=$elt
let "idx+=1"
done
echo ${array[1]},${array[3]},${array[*]}
res=$( echo $(seq 1 9) | awk '{ print $2,$3,$4,$5,$6,$7}')
for elt in $res
do
arr[${id:-0}]=$elt
let "id+=1"
done
echo
for a in {0..5}
do
echo ${arr[$a]}
done