您的位置:首页 > 运维架构 > Shell

awk 输出值到多个变量

2015-12-20 15:16 375 查看
通常把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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息