【发布时间】:2015-01-30 10:00:51
【问题描述】:
考虑以下目前处于公共领域的功能。
function join(array, start, end, sep, result, i)
{
if (sep == "")
sep = " "
else if (sep == SUBSEP) # magic value
sep = ""
result = array[start]
for (i = start + 1; i <= end; i++)
result = result sep array[i]
return result
}
我想使用此函数连接连续的列,例如$2, $3, $4,其中开始和结束范围是变量。
但是,为了做到这一点,我必须首先使用如下循环将所有字段转换为数组。
for (i = 1; i <= NF; i++) {
a[i] = $i
}
或者更短的版本,就像@StevenPenny 提到的那样。
split($0, a)
不幸的是,这两种方法都需要创建一个新变量。
awk 是否有一种将列作为数组访问的内置方式,从而不需要上述手动转换?
【问题讨论】:
-
你就不能
split($0, a)吗? -
@StevenPenny,当然,我会将其编辑到问题中,但它仍然涉及创建一个新变量。
-
@merlin2011 为什么需要将它们放在一个数组中?它们已经被设置为你可以循环到的变量,并且因为 awk 中的所有变量都是全局的,所以不需要向函数传递任何东西,除非你想要一个函数唯一的数组,在这种情况下你会无论如何都需要创建一个新变量。