দয়া করে নোট করুন যে tr -s ' '
বিকল্পটি কোনও একক নেতৃস্থানীয় স্পেসগুলি সরাবে না। যদি আপনার কলামটি ডান-সংযুক্ত থাকে ( ps
পিডের মতো) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
তারপরে কাটাটি সেই প্রথম ক্ষেত্রের কিছু ক্ষেত্রে একটি ফাঁকা রেখার ফলস্বরূপ:
$ <previous command> | cut -d ' ' -f1
19645
19731
আপনি যদি কোনও স্পেস নিয়ে আগে না যান তবে স্পষ্টতই
$ <command> | sed -e "s/.*/ &/" | tr -s " "
এখন, পিড সংখ্যাগুলির এই বিশেষ ক্ষেত্রে (নাম নয়) জন্য একটি ফাংশন রয়েছে pgrep
:
$ pgrep ssh
শেল ফাংশন
তবে সাধারণভাবে শেল ফাংশনগুলি সংক্ষিপ্ত পদ্ধতিতে ব্যবহার করা এখনও সম্ভব , কারণ read
কমান্ড সম্পর্কে একটি ঝরঝরে জিনিস রয়েছে :
$ <command> | while read a b; do echo $a; done
পড়ার জন্য প্রথম প্যারামিটার, a
প্রথম কলামটি নির্বাচন করে এবং যদি আরও কিছু থাকে তবে অন্য সমস্ত কিছু .োকানো হবে b
। ফলস্বরূপ, আপনার কখনই আপনার কলাম +1 এর চেয়ে বেশি ভেরিয়েবলের প্রয়োজন হবে না ।
সুতরাং,
while read a b c d; do echo $c; done
তারপরে 3 য় কলাম আউটপুট হবে। আমার মন্তব্যে ইঙ্গিত হিসাবে ...
একটি পাইপযুক্ত রিড পরিবেশে কার্যকর করা হবে যা কলিং স্ক্রিপ্টে ভেরিয়েবলগুলি পাস করে না।
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
অ্যারের সমাধান
সুতরাং আমরা @Frayser এর উত্তরটি শেষ করব যা শেল ভেরিয়েবল আইএফএস ব্যবহার করে যা কোনও স্থানের ডিফল্ট হয়, স্ট্রিংটিকে অ্যারেতে বিভক্ত করে। এটি কেবল বাশে কাজ করে। ড্যাশ এবং অ্যাশ এটি সমর্থন করে না। ব্যাসিবক্স জিনিসটিতে একটি স্ট্রিংকে উপাদানগুলিতে বিভক্ত করতে আমার খুব কষ্ট হয়েছে। একটি একক উপাদান (উদাহরণস্বরূপ awk ব্যবহার করে) পাওয়া এবং তারপরে আপনার প্রয়োজনীয় প্রতিটি প্যারামিটারের জন্য এটি পুনরাবৃত্তি করা যথেষ্ট সহজ। কিন্তু তারপরে আপনি একই লাইনে বার বার অজকে কল করতে বা বার বার একই লাইনে প্রতিধ্বনি সহ একটি রিড ব্লক ব্যবহার করছেন। যা দক্ষ বা সুন্দর নয়। সুতরাং আপনি ব্যবহার করে বিভাজন শেষ ${name%% *}
ইত্যাদি। আপনাকে কিছু পাইথন দক্ষতার জন্য আকুল করে তোলে কারণ বাস্তবে শেল স্ক্রিপ্টিং যদি আপনি অভ্যস্ত, অর্ধেক বা আরও বেশি বৈশিষ্ট্যগুলি হারিয়ে যায় তবে আর মজা করা যায় না। তবে আপনি ধরে নিতে পারেন যে এমন একটি সিস্টেমে পাইথনও ইনস্টল করা হবে না এবং এটি ;-) ছিল না।