2012-03-02 106 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