請考慮以下目前處於公共領域的功能。
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是否具有以數組的方式訪問列的內置方式,以便上述手動轉換不是必需的?
你不能做'拆分($ 0,a)'嗎? – 2014-12-02 08:22:05
@StevenPenny,絕對,我會編輯這個問題,但它仍然涉及到創建一個新的變量。 – merlin2011 2014-12-02 08:23:36
@ merlin2011爲什麼你需要他們在一個數組?它們已經被設置爲可以循環的變量,並且由於awk中的所有變量都是全局變量,因此不需要將任何內容傳遞給函數,除非您希望函數具有唯一的數組,在這種情況下,您將無論如何需要創建一個新的變量。 – 2014-12-02 08:32:09