2013-04-15 70 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