我正在尝试在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}}'
但这不起作用......显然,这是一个语法问题。我不知道写这个的正确方法。我很感激任何建议。
答案 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