2013-04-15 94 views
2

我是bash編程的新手,實際上我沒有在剛纔回答的問題中找到答案。awk一個變量列表

我買了時間戳值列表的變量,如

myvar="16:00:01 17:30:00 18:13:12" 

我所要做的是填補每一個時間戳的數組列表。現在我在做什麼(和它的作品)是:

varlist[0]=$(echo $myvar | awk '{$NF = "" ; print $1}') 
varlist[1]=$(echo $myvar | awk '{$NF = "" ; print $2}') 
varlist[2]=$(echo $myvar | awk '{$NF = "" ; print $3}') 

的問題是,把一切在一個像下面的循環,它並沒有給我的單項時間戳,但整個字符串。

for (i=1 ; i<=3; i++) 
do 
    varlist[$i]=$(echo $myvar | awk '{$NF = "" ; print $i}') 
done 

我該如何循環awk?

+0

檢查這裏:HTTP://theunixshell.blogspot.com/2013/01/passing-bash-variable-to-awk.html – Vijay

回答

4

可以創建在bash直接像這樣的數組:

array=($myvar) 

然後:

# print # of elements in array 
echo ${#array[@]} 

# print all the elements in array 
echo ${array[@]} 

# loop thru your array 
for i in ${array[@]}; do 
    echo "i=$i" 
done 
+0

回聲$ {#數組[@]}給了我1因爲結果myvar是一個字符串。有什麼方法可以獲得myvar中的時間戳數量嗎? – FreddyCBingo

+0

@FreddyCBingo:在這裏看到現場演示:http://ideone.com/mw6Vlw – anubhava

+0

你也有'myvar =「16:00:01 17:30:00 18:13:12」'而不是' myvar =「16:00:01 17:30:00 18:13:12」' – anubhava

0

的問題是,你是特林使用外部變量(即: 「$i」)在你的awk腳本里面用單引號。它(那些單引號)不允許解釋變量。你可以這樣做(如果你想用awk做到這一點,但也有其他方法 - 查找bash數組文檔)。

for (i=1 ; i<=3; i++) 
do 
varlist[$i]=$(echo $myvar | awk -v CNTR=$i '{print $CNTR}') 
done 
1
for (i=1 ; i<=3; i++) 
do 
varlist[$i]=$(echo $myvar | awk -v myi=$i '{$NF = "" ; print $myi}') 
done 
+0

thnks,它的作品! 怎麼樣讓MYVAR長度,以便把它放在去年週期: 爲(i = 0;我<$ NF;我++) 做 等等等等 做 是正確的嗎? – FreddyCBingo

+0

你是什麼意思的長度?是myvar的字段數還是字符數? – Vijay