我是关于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?
答案 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