首页 > 解决方案 > AWK - 如何轻松定义自定义值列表并循环遍历它?

问题描述

首先,我正在寻找一种更简单的方法,而不是在这里调试问题。

我知道,在 AWK 中,我们可以遍历如下值:

echo "hello world" |awk '{for (t=1; t<=10; t++) print t, $0}'

但是现在我需要遍历一些自定义值,例如 1、3、5、7、9、10、30、50、70、90、100、300、500、700、900。对我有用的是像这样:

echo "hello world" |awk 'BEGIN{t_values[1]=1; t_values[3]=1, t_values[5]=1, ... t_values[700]=1, t_values[900]=1} {for (t in t_values) print t, $0}'

但是,这需要大量打字并且容易出错。有没有更简单的方法来做到这一点?例如,定义一个值列表,t_values=[1, 3, 5, 7, 9, ..., 700, 900]然后循环遍历它?

标签: arraysloopsfor-loopawk

解决方案


您可以传递逗号分隔值并使用拆分:

awk -v t_values='1,3,5,7,9,700,900' 'BEGIN {
  n = split(t_values, vals, /,/); for (i=1; i<=n; i++) print vals[i]}'
1
3
5
7
9
700
900 

如果你想在里面定义变量,awk那么:

awk 'BEGIN{t_values="1,3,5,7,9,700,900";
n = split(t_values, vals, /,/); for (i=1; i<=n; i++) print vals[i]}'

推荐阅读