awk 输出值到多个变量

通常把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



版权声明:本文为resource原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。