2012-03-02 107 views
2

这是一个很常见的脚本:从一个awk命令设置多个变量?

#!/bin/bash 

teststr="col1 col2" 

var1=`echo ${teststr} | awk '{print $1}'` 
var2=`echo ${teststr} | awk '{print $2}'` 

echo var1=${var1} 
echo var2=${var2} 

但是我不喜欢这一点,特别是当有更多的领域进行解析。 我想应该有更好的方法,例如:

(var1,var2)=`echo $ {teststr} awk'{print $ 1 $ 2}' (在我的想象中)

是这样吗? 感谢您帮助提高效率并节省一些CPU电源。

回答

6

这可能会为你工作:

var=(col0 col1 col2) 
echo "${var[1]}" 
col1 
+0

谢谢提醒我为bash arries。这是解决方案。你也可以这样写:var =('echo $ {blabla} | awk -F“_”'{print $ 1“”$ 3}'')... – 2012-03-02 08:28:31

0

Bash有阵列支持,我们只需要动态地提供值:)

function test_set_array_from_awk(){ 

    # Note : -a is required as declaring array 
    let -a myArr; 

    # Hard Coded Valeus 
    # myArr=("Foo" "Bar" "other"); 
    # echo "${myArr[1]}" # Print Bar 

    # Dynamic values 
    myArr=($(echo "" | awk '{print "Foo"; print "Bar"; print "Fooo-And-Bar"; }')); 

    # Value @index 0 
    echo "${myArr[0]}" # Print Foo 

    # Value @index 1 
    echo "${myArr[1]}" # Print Bar 

    # Array Length 
    echo ${#myArr[@]} # Print 3 as array length 

    # Safe Reading with Default value 
    echo "${myArr[10]-"Some-Default-Value"}" # Print Some-Default-Value 
    echo "${myArr[10]-0}" # Print 0 
    echo "${myArr[10]-''}" # Print '' 
    echo "${myArr[10]-}"  # Print nothing 

    # With Dynamic Index 
    local n=2 
    echo "${myArr["${n}"]-}" # Print Fooo-And-Bar 

} 

# calling test function 
test_set_array_from_awk 

猛砸阵列文档:http://tldp.org/LDP/abs/html/arrays.html