使用AWK执行循环,但使用预定义变量

时间:2016-12-23 18:23:42

标签: bash awk

我正在尝试在bash中创建一系列数字。我发现对于很长的序列,使用写入awk的循环比使用for; do; (sequence); done的传统循环更快更省时。例如,如果我有5个样本,并且我想创建一个时间序列从0开始,每个样本之间的增量为0.5秒,awk我只写:

awk 'BEGIN {time=0; print time; for (i=1; i<5; ++i) {time += 0.5; print time}}'

它的工作原理......现在,我正在尝试在脚本中使用此命令,该脚本自动生成多次序列,其中一些序列具有不同的点数和不同的增量。因此,我需要先定义一些基于每个数据集的特征创建的变量,然后在awk中使用它们。像这样的东西(适用于前面的例子):

start=1
end=5
increment=0.5
awk 'BEGIN {time=0; print time; for (i=$start; i<$end; ++i) {time += $increment; print time}}'

但这不起作用......显然,这是一个语法问题。我不知道写这个的正确方法。我很感激任何建议。

1 个答案:

答案 0 :(得分:1)

使用-v语法在awk中添加变量,在下面的示例中使用我导入同名bash变量的语法。

awk -v start="$start" -v end="$end" -v increment="$increment" 'BEGIN {time=0; print time; for (i=start; i<end; ++i) {time += increment; print time}}'
0
0.5
1
1.5
2

您也可以直接采用变量值

awk -v start=1 -v end=5 -v increment=0.5 'BEGIN {time=0; print time; for (i=start; i<end; ++i) {time += increment; print time}}'
0
0.5
1
1.5
2