सवाल उबंटू पर कॉलम द्वारा, सरणी में संख्याओं की टेक्स्ट फ़ाइल पढ़ने के लिए एक बैश स्क्रिप्ट लिखना


मैं उबंटू 12.04 पर एक छोटी बैश लिपि लिखने की कोशिश कर रहा हूं और थोड़ा अनुभव नहीं है। अजीब छोटी समस्या संख्याओं की एक पाठ फ़ाइल को सरणी में परिवर्तित कर रही है। मुझे अपनी पहली सरणी में सभी नंबरों, सेकेंड इत्यादि की ज़रूरत है क्योंकि मैं उस लाइन से अधिक कॉलम के आधार पर संख्याओं पर गणना करूँगा। सभी पंक्तियां प्रत्येक पंक्ति के अंत में वापसी के साथ रिक्त स्थान से अलग 5 पूर्णांक हैं। एक बहुआयामी सरणी बाश में संभव है? धन्यवाद!


1
2018-01-15 19:34


मूल


क्या आप अपने इनपुट और आउटपुट का एक छोटा सा उदाहरण दे सकते हैं? क्या यह वास्तव में बाश होने की आवश्यकता है या एक ऑक्टेट स्क्रिप्ट भी काम कर सकता है? - Presbitero
मैं किसी भी मदद की सराहना करता हूं, लेकिन मुझे स्पष्टीकरण देता है क्योंकि मुझे वास्तव में यह मतलब नहीं था कि मुझे दो आयामी सरणी की आवश्यकता है। आइए मान लें कि यह मेरी टेक्स्ट फ़ाइल है: 1 2 3 4 5 अगली पंक्ति: 7 10 200 3 मुझे उन्हें संग्रहित एक्स (1) = 1, वाई (1) = 2 .... x (2) = 7, y ( 2) = 10 ... और इसी तरह। - JClar


जवाब:


यहां एक स्क्रिप्ट है, यह टेक्स्ट फ़ाइल से संख्याओं को दो सरणी में संग्रहीत करेगी x तथा y जैसे कि तुम्हारी इच्छा थी,

#!/bin/bash

nl=$(cat "$1" | wc -l)
declare -a x
declare -a y
for i in $(seq 1 $nl)
do
    x[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $1}')"
    y[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $2}')"
done
#upto this point all the numbers from first and second column of the file are stored 
#into x and y respectively. Following lines will just print them again for you.
for it in $(seq 1 $nl)
do
    echo "${x[$it]} ${y[$it]}"
done

स्क्रिप्ट निष्पादन अनुमति देने के लिए मत भूलना।

chmod +x script.sh

प्रयोग

./script.sh numfile.txt

जहां मैं विचार कर रहा हूं कि आप उपर्युक्त लिपि को सहेज लेंगे script.sh और आपकी टेक्स्टफाइल संख्याएं हैं numfile.txt। और दोनों एक ही निर्देशिका में हैं।


2
2018-01-21 11:11





बैश केवल एक-आयामी सरणी का समर्थन करता है, हालांकि एक छोटी सी चालबाजी बहु-आयामी वाले अनुकरण की अनुमति देती है।

इस दस्तावेज़ में एक द्वि-आयामी सरणी का एक उदाहरण है। http://tldp.org/LDP/abs/html/arrays.html

मुझे आश्चर्य है कि क्या कोई अन्य भाषा आपके उपयोग मामले को अधिक आसानी से अनुकूल कर सकती है। ऐसा लगता है कि आप क्या कर सकते हैं की सीमा को खींच रहे हैं, जबकि पायथन, पर्ल या रूबी इस कार्य को आसानी से संभाल लेंगे। मुझे लगता है कि आप अपने बाद के "कंप्यूटेशंस" के लिए उपयोग किए जाने वाले टूल को काफी हद तक निर्धारित करेंगे।


1
2018-01-15 19:48





खेद है कि मैंने वापस जांच नहीं की है। समाधान मैंने सोचा था जितना मैंने सोचा था क्योंकि संख्याओं को लाइनों के अंत में वापसी के साथ एक स्थान से अलग किया गया था।

#!/bin/bash
COUNT=1
while read arr1[COUNT] arr2[COUNT] arr3[COUNT] arr4[COUNT] arr5[COUNT]
do
echo "next line"
 echo "${arr1[COUNT]}" 
 echo "${arr2[COUNT]}"
 echo "${arr3[COUNT]}"
 echo "${arr4[COUNT]}"
 echo "${arr5[COUNT]}"
COUNT=$[$COUNT +1]
done < /home/john/testloop.txt

-1
2018-01-21 15:23