2012-03-01 39 views
9

मैं एक सरणीखोल स्क्रिप्ट

arr=(x11 y12 x21 y22 x31 y32) 

है मैं तो

x11 x21 x31 y12 y22 y32 

को यह सरणी सॉर्ट करने के लिए की जरूरत है छँटाई, मैं दोनों वर्णमाला और संख्यात्मक बुद्धिमान

सॉर्ट करने के लिए मैं कैसे करूँ जरूरत इसे खोल स्क्रिप्ट में करें?

यदि मैं [ $i -le $j ] का उपयोग करता हूं, तो यह "पूर्णांक अभिव्यक्ति अपेक्षित" कहता है।

और तारों में अन्य वर्ण भी हो सकते हैं: x.1.1 या 1.x.1

मैं यह कैसे कर सकता हूं?

+0

क्या आपने 'sort' की कोशिश की है? – l0b0

+0

क्या आप मुझे पूरा वाक्यविन्यास दे सकते हैं, मैं एक शुरुआती हूं – user691197

+0

संभावित डुप्लिकेट [बाश में सरणी को कैसे क्रमबद्ध करें] (http://stackoverflow.com/questions/7442417/how-to-sort-an-array- इन-बैश) –

उत्तर

18

पहले लाइनों में सरणी तत्वों विभाजित (सबसे * nix कार्यक्रमों केवल लाइनों के साथ काम करते हैं):

for el in "${arr[@]}" 
do 
    echo "$el" 
done 

तब लाइनों क्रमबद्ध करें:

for el in "${arr[@]}" 
do 
    echo "$el" 
done | sort 

अब आप फिर से एक सरणी है कि प्रदान कर सकते हैं :

arr2=($(
    for el in "${arr[@]}" 
    do 
     echo "$el" 
    done | sort)) 

बिंगो:

$ echo "${arr2[@]}" 
x11 x21 x31 y12 y22 y32 

को समझने के लिए यह सब कैसे काम करता है, और यह कैसे बदलने के लिए अगर यह ठीक आप क्या चाहते हैं नहीं करता है, man पृष्ठों पर एक नजर है:

man bash 
man sort 

भी How to sort an array in BASH देखें।

+0

धन्यवाद यह काम किया! – user691197

+0

क्या आप मुझे सी खोल के लिए एक ही वाक्यविन्यास दे सकते हैं। यह कहता है कि "गायब -" जब cshell के माध्यम से चलाया जाता है। – user691197

+0

आपको टैग या प्रश्न में निर्दिष्ट होना चाहिए था। मुझे सीएसएच नहीं पता। – l0b0

संबंधित मुद्दे