2013-01-11 14 views
5

में बहुआयामी सरणी मैंने अजीब में एक छद्म-बहुआयामी सरणी बनाने की कोशिश की।अजीब

# Calculate cumulative context score 

BEGIN { FS=OFS="\t" } 

{ 
     a[$2+FS+$7,$3]+=$6 
} 

END { for (i,j) in a 
     { print i,j,a[i,j] } 

} 

आउटपुट:

To test whether a particular index sequence exists in a multidimensional array, use the same operator (in) that is used for single dimensional arrays. Write the whole sequence of indices in parentheses, separated by commas, as the left operand:

(subscript1, subscript2, ...) in array 

मैं स्क्रिप्ट को संशोधित करने की कोशिश की एक सच्चे-बहु आयामी सरणी बनाने के लिए:

awk: ccstscan.awk:9: END { for (i,j) in a 
awk: ccstscan.awk:9:   ^syntax error 

यह है कि क्या जीएनयू awk के मैनुअल में उल्लेख किया गया है है

BEGIN { FS=OFS="\t" } 

{ 
    a[$2+FS+$7][$3]+=$6 
} 

END { for i in a 
    { 
    for j in a[i] 
     { print i,j,a[i][j] 
     } 

    } 
} 

मैंने इसे साथ चलाया gawk।

gawk: ccstscan.awk:6: a[$2+FS+$7][$3]+=$6 
gawk: ccstscan.awk:6:   ^syntax error 
gawk: ccstscan.awk:9: END { for i in a 
gawk: ccstscan.awk:9:   ^syntax error 
gawk: ccstscan.awk:11: for j in a[i] 
gawk: ccstscan.awk:11:  ^syntax error 
gawk: ccstscan.awk:11: for j in a[i] 
gawk: ccstscan.awk:11:   ^syntax error 
gawk: ccstscan.awk:12:   { print i,j,a[i][j] 
gawk: ccstscan.awk:12:      ^syntax error 

क्या बनाने के लिए और स्कैन बहुआयामी-साहचर्य सरणियों

+1

लूप गायब है (और), यह 'मैं (i में)' है, न कि मैं 'में' हूं। साथ ही, आपको शायद सरणी इंडेक्स के बारे में पहली वाक्यविन्यास त्रुटि मिल रही है क्योंकि आप पुराने गॉक का उपयोग कर रहे हैं, वास्तविक बहु-आयामी सरणी काफी हालिया जोड़ हैं। –

+0

मैं gawk4 में arrays के सरणी का एक लिंक जोड़ूंगा http://www.gnu.org/software/gawk/manual/html_node/Arrays-of-Arrays.html – Kent

उत्तर

10

आप नकली बहुआयामी सरणियों का उपयोग कर रहे हैं, तो अपने पाश की तरह करने की आवश्यकता होगी करने के लिए सही प्रारूप है: यह भी एक त्रुटि दे दी है इस:

END { 
    for (ij in a) { 
     split(ij,indices,SUBSEP); 
     i=indices[1]; 
     j=indices[2]; 
     print i,j,a[ij] 
    } 
    } 

(i,j) in a वाक्य रचना केवल परीक्षण के लिए काम करता है कि क्या एक विशेष सूचकांक सरणी में है। फॉर-लूप के लिए यह समान वाक्यविन्यास की इजाजत देने के बावजूद काम नहीं करता है।

सच बहुआयामी सरणियों (सरणियों के सरणियों) के लिए, आप इसे इस तरह लिख सकते हैं:

BEGIN { FS=OFS="\t" } 

{ a[$2+FS+$7][$3]+=$6 } 

END { 
    for (i in a) { 
    for (j in a[i]) { 
     print i,j,a[i][j] 
    } 
    } 
} 

हालांकि, सरणियों के सरणियों केवल, gawk 4.0 में जोड़ा गया है ताकि gawk के अपने संस्करण नहीं हो सकता इसका समर्थन करें।

एक और ध्यान दें: इस लाइन पर:

a[$2+FS+$7,$3]+=$6 

ऐसा लगता है कि, एफएस $ 7 $ 2 को श्रेणीबद्ध करने की कोशिश कर रहे हैं, और है, लेकिन "+" संख्यात्मक इसके अलावा, नहीं संयोजन के लिए है। आपको इसे इस तरह लिखना होगा:

a[$2 FS $7,$3] += $6 
+2

+1 शानदार उत्तर। –