我正在處理解析文件的Awk/Gawk腳本,爲每行填充多維數組。第一列是以句點分隔的字符串,每個值都是對下一級別數組鍵的引用。第二列是值動態填充多維awk數組
這裏是正在分析什麼內容示例如下:
$ echo -e "personal.name.first\t= John\npersonal.name.last\t= Doe\npersonal.other.dob\t= 05/07/87\npersonal.contact.phone\t= 602123456\npersonal.contact.email\t= [email protected]\nemployment.jobs.1\t= Company One\nemployment.jobs.2\t= Company Two\nemployment.jobs.3\t= Company Three"
personal.name.first = John
personal.name.last = Doe
personal.other.dob = 05/07/87
personal.contact.phone = 602123456
personal.contact.email = [email protected]
employment.jobs.1 = Company One
employment.jobs.2 = Company Two
employment.jobs.3 = Company Three
其中被解析後,林期待它具有相同的結構爲:
data["personal"]["name"]["first"] = "John"
data["personal"]["name"]["last"] = "Doe"
data["personal"]["other"]["dob"] = "05/07/87"
data["personal"]["contact"]["phone"] = "602123456"
data["personal"]["contact"]["email"] = "[email protected]"
data["employment"]["jobs"]["1"] = Company One
data["employment"]["jobs"]["2"] = Company Two
data["employment"]["jobs"]["3"] = Company Three
我卡在的部分是如何動態地在構造多維數組時填充鍵。
我發現this SO thread,涵蓋了類似的問題,這是通過使用SUBSEP
變量,起初似乎是因爲我需要它的工作解決了,但一些測試後,它看起來像arr["foo", "bar"] = "baz"
沒有得到像對待真正的數組,如arr["foo"]["bar"] = "baz"
會。什麼,我的意思了一個例子是在陣列中任何級別的計數值不能:arr["foo", "bar"] = "baz"; print length(arr["foo"])
只會打印0
(零)
我發現this SO thread這有助於一點點,可能是指着我在正確的方向。
中提到在線程的代碼段:
BEGIN {
x=SUBSEP
a="Red" x "Green" x "Blue"
b="Yellow" x "Cyan" x "Purple"
Colors[1][0] = ""
Colors[2][0] = ""
split(a, Colors[1], x)
split(b, Colors[2], x)
print Colors[2][3]
}
是非常接近的,但我現在遇到的問題是,該密鑰(例如:Red
,Green
等),需要指定動態地,並且可能有一個或多個鍵。
基本上,我怎麼能走a_keys
和b_keys
字符串,通過.
割裂開來,並填充a
和b
變量多維數組?..
BEGIN {
x=SUBSEP
# How can I take these strings...
a_keys = "Red.Green.Blue"
b_keys = "Yellow.Cyan.Purple"
# .. And populate the array, just as this does:
a="Red" x "Green" x "Blue"
b="Yellow" x "Cyan" x "Purple"
Colors[1][0] = ""
Colors[2][0] = ""
split(a, Colors[1], x)
split(b, Colors[2], x)
print Colors[2][3]
}
任何幫助,將不勝感激,謝謝!
我可能忘了提及的是,鑰匙可能並不總是恰好有三個部分。但是,這是一個足夠好的啓動我與之合作。謝謝! – Justin
然後你需要我發佈的第二個解決方案。陳述明顯 - 如果你的真實數據有多個細分市場,那麼你的樣本輸入也應該有。 –