2

我是 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?

4

3 回答 3

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
于 2013-04-15T13:05:28.543 回答
1
for (i=1 ; i<=3; i++)
do
varlist[$i]=$(echo $myvar | awk -v myi=$i '{$NF = "" ; print $myi}')
done
于 2013-04-15T13:06:48.210 回答
0

$i问题是您正在尝试在带有单引号的 awk 脚本中使用外部变量(即:“ ”)。它(那些单引号)不允许解释变量。

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

for (i=1 ; i<=3; i++)
do
varlist[$i]=$(echo $myvar | awk -v CNTR=$i '{print $CNTR}')
done
于 2013-04-15T13:05:36.607 回答