awk一个变量列表

时间:2013-04-15 13:00:40

标签: bash

我是关于bash编程的新手,实际上我没有在刚刚回答的问题中找到我的主题的答案。

我得到了一个带有时间戳值列表的变量,例如

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循环中,如下所示,它不会给我单个项目的时间戳,而是整个字符串。

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

如何循环awk?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

问题是你要使用单引号在awk脚本中使用外部变量(即:“$i”)。它(那些单引号)不允许解释变量。

你可以这样做(如果你想用awk做,但还有其他方法 - 查找bash数组文档)。

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