लीनक्स में किसी फाइल को लाइन से कैसे पढ़ा जाए? इस आर्टिकल में उन त्रुटियों कि भी चर्चा की गई है जो कोई सामान्य प्रयोगकर्ता लाइन से फाइल पढ़ने के दौरान करता है. उदाहरणों एवं चित्रों की मदद से यह समझाया गया है कि अलग लग आउटपुट के लिए for loop (फॉर लूप) एवं while loop (व्हाइल लूप) में क्या अंतर है. इस आर्टिकल से यह भी समझने में मदद मिलेगी कि व्हाइल लूप का प्रयोग कैसे किया जाता है.
लीनक्स पर सबसे सामान्य गलती तब होती है जब आप लूप की सहायता से किसी फाइल को लाइन से ($ में लाइन के लिए - cat file.txt) पढ़ने की कोशिश करते हैं. इस उदाहरण में हर लाइन को पढ़ने की कोशिश की गई है ना कि हर शब्द को.
लूप शुरू करने से पहले FOR लूप के लिए $ आईएफएस (इंटरनल फील्ड सेपरेटर) की वेल्यु बदली जा सकती है.
For लूप के लिए यह है एक आउटपुट का एक उदाहरण
$ (cat file.txt) में For लाइन का "$ line" इको पूर्ण
This
is
row
No
1
This
is
row
No
2
This
[...]
इंटरनल रीड के साथ While लूप इसका समाधान है.
लूप शुरू करने से पहले एक For लूप के लिए $ आईएफएस (इंटरनल फील्ड सेपरेटर) की वेल्यु बदलकर परिणाम पाया जा सकता है.
While लूप
यह व्हाइल लूप फाइल को लाइन से पढ़ने का सबसे उचित माध्यम है
सिंटेक्स
while read line
do
command
done <file
पहली फाइल:
This is line 1
कमांड लाइन में निर्देश:
while read line; do echo -e "$line\n"; done < file.txt
या "बैश" स्क्रिप्ट में:
#! / bin / bash
while read line
do
echo-e "$ line \ n"
done <file.txt
The output on the screen (stdout):
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
संरचित फाइल से (जैसे कोई एड्रेस बुक or /etc/पासवर्ड, उदहारण के लिए) प्रत्यके फील्ड से उसका महत्व पुनःप्राप्त किया जा सकता है. इसी के साथ रीड निर्देश की सहायता से कुछ अन्य वेरियेबल भी असाइन किए जा सकते हैं. आईएफएस वेरिएबल एवं फील्ड सेपरेटर को ध्यान से स्थापित करें.
उदाहरण:
#! /bin/bash
while IFS=: read user pass uid gid full home shell
do
echo -e "$full :\n\
Pseudo : $user\n\
UID :\t $uid\n\
GID :\t $gid\n\
Home :\t $home\n\
Shell :\t $shell\n\n"
done < /etc/passwd
while read i; do echo -e "Parameter : $i"; done < <(echo -e "a\nab\nc")
हालाकिं व्हाइल लूप सबसे आसान तरीका माना जाता है, इसके साइड इफेक्ट भी होते हैं. यह लाइन की संरचना, फोर्मेशन, स्पेस को बिगाड़ सकता है.
सिंटेक्स
old_IFS=$IFS # save the field separator
IFS=$'\n' # new field separator, the end of line
for line in $(cat fichier)
do
command
done
IFS=$old_IFS # restore default field separator
Image: © Linux.