অ্যান্ড্রয়েড

বাশ-এ লাইন দিয়ে ফাইল লাইন কীভাবে পড়বেন

Slab ঢালাই এর পূর্বে যে সকল কাজ করণীয় | Civil Engineering | Bangla Video Tutorial

Slab ঢালাই এর পূর্বে যে সকল কাজ করণীয় | Civil Engineering | Bangla Video Tutorial

সুচিপত্র:

Anonim

বাশ স্ক্রিপ্টগুলি লেখার সময় আপনি মাঝে মাঝে নিজেকে এমন পরিস্থিতিতে দেখতে পাবেন যেখানে আপনাকে একটি লাইনে একটি ফাইল লাইন পড়তে হবে। উদাহরণস্বরূপ, আপনার কাছে ডেটাযুক্ত একটি পাঠ্য ফাইল থাকতে পারে যা স্ক্রিপ্ট দ্বারা প্রক্রিয়া করা উচিত।

এই টিউটোরিয়ালে, আমরা বাশ-এ লাইন দ্বারা একটি ফাইল লাইন কীভাবে পড়তে হবে তা নিয়ে আলোচনা করব।

লাইন সিনট্যাক্স দ্বারা একটি ফাইল লাইন পড়া

লাইন বাই লাইন ফাইল পড়ার জন্য সর্বাধিক সাধারণ বাক্য গঠন:

while IFS= read -r line do echo "$line" done < input_file

বা সমমানের একক-লাইন সংস্করণ:

while IFS= read -r line; do echo $line; done < input_file

এটা কিভাবে কাজ করে?

ইনপুট ফাইল ( input_file ) হ'ল read কমান্ড দ্বারা পড়ার জন্য যে ফাইলটি আপনি খুলতে চান তার নাম। read কমান্ডটি প্রতিটি line ভেরিয়েবলের জন্য নির্ধারিত করে রেখায় ফাইল লাইন পড়ে reads সমস্ত লাইনগুলি প্রক্রিয়া করা হয়ে গেলে লুপটি সমাপ্ত হবে। অভ্যন্তরীণ ক্ষেত্র বিভাজক ( IFS ) শীর্ষস্থানীয় এবং ট্রেলিং হোয়াইটস্পেস সংরক্ষণের জন্য নাল স্ট্রিংয়ে সেট করা হয়েছে যা read কমান্ডের ডিফল্ট আচরণ।

লাইন উদাহরণ দ্বারা একটি ফাইল লাইন পড়া

আসুন নীচের উদাহরণটি একবার দেখুন। মনে করুন, আমাদের কাছে distros.txt নামের একটি ফাইল রয়েছে যা বেশ কয়েকটি জনপ্রিয় লিনাক্স বিতরণ এবং তাদের প্যাকেজ ম্যানেজারদের কমা ( , ) দ্বারা পৃথক করে রয়েছে:

distros.txt

Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf

লাইন দ্বারা ফাইল লাইন পড়তে আপনি আপনার টার্মিনালে নিম্নলিখিত কোডটি চালাবেন:

while IFS= read -r line do echo "$line" done < distros.txt

কোডটি লাইন দ্বারা ফাইলটি পড়বে, প্রতিটি লাইনকে একটি ভেরিয়েবলের জন্য বরাদ্দ করবে এবং ভেরিয়েবলটি প্রতিধ্বনি করবে। বেসিকটি আপনি একই আউটপুট দেখতে পাবেন যেন আপনি বিড়াল কমান্ড ব্যবহার করে ফাইল সামগ্রী প্রদর্শন করবেন।

আপনি যদি কেবল অ্যাপটি ব্যবহার করে এমন বিতরণগুলি মুদ্রণ করতে চান? একটি উপায় হ'ল if স্টেটমেন্টটি ব্যবহার করুন এবং লাইনে অ্যাপটি সাবস্ট্রিং রয়েছে কিনা তা যাচাই করা হবে:

while IFS= read -r line do if]; then echo "$line" fi done < distros.txt

Ubuntu, apt Debian, apt

লাইন দ্বারা ফাইল লাইন পড়ার সময়, আপনি একাধিক ভেরিয়েবলগুলি রিড কমান্ডেও পাঠাতে পারেন যা IFS ভিত্তিতে লাইনটি বিভক্ত করবে। প্রথম ক্ষেত্রটি প্রথম ভেরিয়েবল, দ্বিতীয় থেকে দ্বিতীয় ভেরিয়েবল এবং আরও কিছুতে নির্ধারিত হয়। যদি ভেরিয়েবলের চেয়ে বেশি ক্ষেত্র থাকে তবে অবশিষ্ট ক্ষেত্রগুলি সর্বশেষ ভেরিয়েবলের জন্য বরাদ্দ করা হয়।

নিম্নলিখিত উদাহরণে, আমরা একটি কমাতে আইএফএস সেট করে দিচ্ছি ( , ) এবং দুটি ভেরিয়েবল distro এবং pm পঠন কমান্ডে প্রেরণ করছি। লাইনের শুরু থেকে প্রথম কমা পর্যন্ত সমস্ত কিছু প্রথম ভেরিয়েবলকে ( distro ) বরাদ্দ করা হবে এবং বাকী রেখাটি দ্বিতীয় ভেরিয়েবেলে ( pm ) নির্ধারিত হবে:

while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt

apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora

বিকল্প ফাইল পড়ার পদ্ধতি

একটি প্রক্রিয়া প্রতিস্থাপন ব্যবহার

প্রক্রিয়া বিকল্প আপনাকে ফাইলের নাম হিসাবে আদেশ থেকে আউটপুট পাস করতে দেয়:

while IFS= read -r line do echo "$line" done < <(cat input_file)

এহেন স্ট্রিং ব্যবহার করা হচ্ছে

এখানে স্ট্রিং হেরে ডকুমেন্টের একটি বৈকল্পিক। স্ট্রিং (cat input_file) নতুন (cat input_file) :

while IFS= read -r line do echo "$line" done <<< $(cat input_file)

ফাইল বর্ণনাকারী ব্যবহার করে

আপনি কোনও ফাইল বর্ণনাকারী ব্যবহার করে লুপটিতে ইনপুট সরবরাহ করতে পারেন:

while IFS= read -r -u9 line do echo "$line" done 9< input_file

ফাইল বর্ণনাকারীদের সাথে কাজ করার সময় শেল অভ্যন্তরীণ ফাইল বর্ণনাকারীদের সাথে দ্বন্দ্ব এড়াতে 4 থেকে 9 এর মধ্যে একটি সংখ্যা ব্যবহার করুন।

উপসংহার

বাশ-এ, আমরা কিছুক্ষণ পড়ার লুপটিতে ইনপুট হিসাবে ফাইলের নাম সরবরাহ করে একটি ফাইল লাইন বাই লাইন পড়তে পারি।

বাশ টার্মিনাল