想知道这在AWK中是否可行一段时间,但过去总是在解决它。
下面我用一年中的3个月初始化一个数组...为了便于阅读,我在其他9个月内省略了。这些月份然后在if语句中用作正则表达式的一部分,但AWK不喜欢它。我似乎无法在关于这种语义的awk / gawk手册中找到任何内容......我是否真的坚持重复使用相同的代码12次?还可以在循环中使用arr [i]作为变量名的子字符串吗?我在下面编写了伪代码,以便了解我正在努力实现的目标。我知道它在SNOBOL中是可行的;-)谢谢!
BEGIN {
arr[0] = "AUG"
arr[1] = "SEP"
arr[2] = "OCT"
}
{
for(i in arr)
{
if($1 ~ /arr[i]/)
{
#Controls flows into here if $1 matches AUG, SEP, OCT
#Furthermore, pretend I want to intialize a variable like AUGseen:
arr[i]seen = 1
}
}
}
如果这些事情中的任何一个都可行,我非常感谢指针!
答案 0 :(得分:3)
您可以将match
用于动态正则表达式。
if(match($1, arr[i]))
答案 1 :(得分:1)
我不认为awk支持这个概念,但使用函数同样有效:
# fail is the default return code, the user should insure that it does not
# exist as a key to arr
function amatch(candidate, arr, fail) {
for (i in arr)
if ( match(candidate,array[i]) ) return i;
return fail;
}
答案 2 :(得分:1)
这是另一种选择,它不使用数组。 (您可以将阵列保留用于其他目的)
BEGIN {
dates="AUG|SEP|OCT"
}
{
if( $1 ~ dates) {
print ...
}
}