मान लेते हैं, कि आपकी फ़ाइल का नाम है test1
पूरा कमांड इस तरह दिखता है (एक पंक्ति में):
names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g") && names2=(${names//;/ }) && for var in "${names2[@]}"; do numbers=$(cat test1 | sed -n "/$var/{n;p}" | sed "s/\s/;/g"); numbers2=(${numbers//;/ }); for num in "${numbers2[@]}"; do echo "$var,$num"; done; done
बेहतर दृश्य के लिए, इस स्क्रिप्ट को देखें:
names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g")
names2=(${names//;/ })
for var in "${names2[@]}"; do
numbers=$(cat test1 | sed -n "/$var/{n;p}" | sed "s/\s/;/g")
numbers2=(${numbers//;/ })
for num in "${numbers2[@]}"; do
echo "$var,$num"
done
done
अब मैं कमांड के सभी हिस्सों का वर्णन करना चाहता हूं
कमांड का विवरण
कमांड names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g")
मुझे आपके मामले में अर्धविराम के साथ अलग किए गए नामों की एक सूची देता है Kerala;Delhi;Goa
। मैं उन्हें इस रूप में चाहता हूं, क्योंकि अब मैं उन्हें दूसरी कमान के साथ एक सरणी में बदल सकता हूं names2=(${names//;/ })
। अब मैं सभी नामों के माध्यम से पुनरावृति करता हूं, जो पहले for
लूप के साथ किया जाता है ।
आदेश numbers=$(cat test1 | sed -n "/$var/{n;p}" |sed "s/\s/;/g");
मुझे वर्तमान चर के लिए संख्या देता है $var
। इसके लिए Ie Kerala
होगा 4222;8129;8163;8164
। व्यवहार पहले कमांड के समान है: मैं उन्हें एक सरणी में बदलना चाहता हूं, इसलिए मैं उनके माध्यम से पुनरावृति कर सकता हूं, जो अगले आदेश के साथ किया जाता है numbers2=(${numbers//;/ });
। अब मैं संख्याओं के माध्यम से पुनरावृति करता हूं और उन्हें स्क्रीन पर प्रिंट करता हूं
for num in "${numbers2[@]}"; do echo "$var,$num"; done
मुझे उम्मीद है कि यह समझ में आएगा।
sed
और नहींawk
(याperl
,python
आदि)?