Bash awk:将变量字符串解析成另一个变量?

时间:2018-04-09 14:11:51

标签: bash parsing awk

我想提取$ line中包含的所有值,并将它们放在变量var1,var2,... varn中。我之前使用它来从文件(in.txt)中提取变量

var1=$(awk  '{print  $1}' < in.txt)
var2=$(awk  '{print  $2}' < in.txt)
....
varn=$(awk  '{print  $n}' < in.txt)

如何更改我的awk调用以便使用$ line而不是in.txt? 我试过这些例如

echo $line | var2=$(awk '{print  $2}')

var2=$(echo $line | awk '{print  $2}')

但没有成功......

==========详情==============

-----调用文件:

 .....
    name=Matrix
    line=$(sed  -n '/^\[T\]/ {n;p}' in.txt)
    echo 'line: ' $line
    L1=$(./procline_matrix_vars.sh $line 30 $name)
    echo 'L1: ' $L1

------- rocline_matrix_vars.sh:

#!/bin/bash

line=$1
choice=$2

var1=$(echo $line | awk '{print $1}')
var2=$(echo $line | awk '{print $2}')
var3=$(echo $line | awk '{print $3}')
var4=$(echo $line | awk '{print $4}')


if [ $choice == 30 ]; then
    L1=$(printf '\n\n\n%s = [ %s %s %s %s \n' "$3" "$var1" "$var2" "$var3" "$var4") 
fi

echo  "${L1%.}"

1 个答案:

答案 0 :(得分:1)

一种可能的方式:

line="aaa bbb ccc"

var=( $line )

echo "${var[1]}"
echo "my array has ${#var[@]} elements"

输出

bbb
my array has 3 elements

也许快捷方式

var=( $( awk '{print $1, $2, $10}' file ) )