এই নিবন্ধটি আপনাকে printf ব্যবহার করার জন্য কিছু ব্যবহারিক উদাহরণ দেখাবে লিনাক্সে ব্যাশ/শেলে কমান্ড।
printf কমান্ড আউটপুট পাঠ্য অনেকটা echo এর মত কমান্ড করে - কিন্তু এটি আউটপুট ফরম্যাটিং এর উপর আরো নিয়ন্ত্রণের অনুমতি দেয়।
এটি আপনার নিজস্ব ফরম্যাট করা টেক্সট আউটপুট তৈরি করার জন্য একটি দরকারী টুল – বিশেষ করে যদি আপনার টেক্সটে ভেরিয়েবল এম্বেড করতে হয়, নতুন লাইন, সারিবদ্ধ এবং ফরম্যাট টেক্সট অন্তর্ভুক্ত করতে হয় এবং এমনকি রূপান্তরিত মান প্রদর্শন করতে হয়।
প্রিন্টফ সিনট্যাক্স
printf কমান্ডের নিম্নলিখিত সিনট্যাক্স রয়েছে:
printf [-v var] বিন্যাস [আর্গুমেন্ট]...
মনে রাখবেন:
- The -v বিকল্পটি printf কে ভেরিয়েবল var-এ ফলাফল সংরক্ষণ করতে বলে এটি প্রিন্ট করার চেয়ে
- ফরম্যাট তিনটি ভিন্ন মানের সমন্বয় ধারণকারী একটি স্ট্রিং:
- সাধারণ অক্ষর যা শব্দার্থে মুদ্রিত হবে
- ব্যাকস্ল্যাশ-এস্কেপড অক্ষর যা প্রিন্ট হওয়ার আগে ব্যাখ্যা করা হয়
- রূপান্তরগুলি যা নির্দিষ্ট করা হয় এবং তাদের নিজ নিজ আর্গুমেন্টের সাথে প্রতিস্থাপিত হয় (এগুলিকে কিছুটা ভেরিয়েবলের মতো মনে করুন)
- যুক্তি ফরম্যাটে পাস করা হবে এবং কোনো সংজ্ঞায়িত রূপান্তর
- -এ ব্যবহৃত হয়
- যদি রূপান্তর নির্দিষ্টকরণের চেয়ে বেশি আর্গুমেন্ট ফরম্যাটে উপস্থিত থাকে ফরম্যাট সমস্ত আর্গুমেন্ট পর্যন্ত স্ট্রিং পুনরাবৃত্তি হয় ব্যবহার করা হয়েছে
- যদি কম আর্গুমেন্ট থাকে, সাংখ্যিক স্পেসিফায়ারগুলি শূন্যতে সেট করা হয়, এবং স্ট্রিং স্পেসিফায়ারগুলি নাল সেট করা হয়
ছাপানো অক্ষর, রূপান্তর এবং পতাকা মুদ্রণ করুন
printf বিকল্পগুলির একটি বিশাল সংগ্রহ রয়েছে যা এটিকে অসংখ্য উপায়ে টেক্সট ফর্ম্যাট করতে এটিকে পাস করা যেতে পারে। নীচের উদাহরণগুলি আপনাকে কিছু ব্যবহারিক অ্যাপ্লিকেশন দেখাবে।
তালিকার পরিবর্তে প্রতিটি যে বিকল্পটি এখানে কমান্ডে পাঠানো যেতে পারে, আপনি printf-এর জন্য সম্পূর্ণ ব্যবহারকারী ম্যানুয়াল দেখতে পারেন চালানোর মাধ্যমে আপনার সিস্টেমে কমান্ড:
ম্যান প্রিন্টফ
প্রিন্টএফ ব্যাশ/শেলের উদাহরণ
ঠিক আছে, তাহলে এই সব আসলে কিসের জন্য ভালো?
সংখ্যার বৃত্তাকার মান প্রদর্শন করা হচ্ছে
প্রথমত, একটি সাধারণ দৃশ্যকল্প – আপনি প্রদর্শনের জন্য একটি সংখ্যাকে দুই দশমিক স্থানে ফর্ম্যাট করতে চান:
printf "%.2f" 4.21423557
এটি আউটপুট করবে:
4.21
নির্দিষ্ট ফর্ম্যাট %.2f printf কে দুই দশমিক স্থানে সংখ্যা ফরম্যাট করতে বলে। এটি নির্ভুলতা ব্যবহার করে করা হয় নির্দেশিকা, যা হল . (পিরিয়ড) বিন্যাসে।
এটি সংখ্যাটিকে প্রদত্ত দশমিক স্থানগুলিতে ছাঁটাই না করে বৃত্তাকার করবে৷ ফ্লোটিং-পয়েন্ট সংখ্যার রাউন্ডিং অদ্ভুত – তাই আপনার আউটপুট পরীক্ষা করুন!
গোলাকার অদ্ভুততা
এই অদ্ভুততা বোঝাতে, নিম্নলিখিত বিবেচনা করুন:
printf "%.2f" 4.215
এটা 4.22 হওয়া উচিত, তাই না? ভুল. printf এর zsh বাস্তবায়নে , এটি বৃত্তাকার হবে:
4.21
নম্বরটি হচ্ছে তা নিশ্চিত করতে আসলে বৃত্তাকার হচ্ছে, আমরা একটি ভিন্ন মান পরীক্ষা করতে পারি:
printf "%.2f" 4.216
যা ফিরে আসবে:
4.22
… তাই নম্বরটি printf-এ পাঠানো হচ্ছে হয়৷ বৃত্তাকার হচ্ছে।
তাহলে কেন 4.215 এর বৃত্তাকার মান ভুল বলে মনে হচ্ছে? সহজভাবে বলতে গেলে, এটি একটি ফ্লোটিং-পয়েন্ট সংখ্যা, অসম্পূর্ণতা প্রদর্শিত মান এবং গণনায় কম্পিউটার দ্বারা ব্যবহৃত মানের মধ্যে একটি বৈষম্যের কারণে ঘটে।
এর চারপাশে উপায় আছে, কিন্তু এটি এই নিবন্ধের সুযোগের বাইরে - আমি এটিকে অন্য একটিতে কভার করব৷
রূপান্তরিত মান (দশমিক, হেক্সাডেসিমেল, অক্টাল)
একটি সাধারণ দৃশ্যকল্প - আপনি কিছু সংখ্যাকে একটি বিন্যাসে প্রদর্শন করতে চান যা অন্য প্রোগ্রাম বা স্ক্রিপ্ট দ্বারা সরবরাহ করা হয়েছে। printf এটির রূপান্তর স্পেসিফিকেশন সিনট্যাক্স ব্যবহার করে এটি করতে পারে:
প্রিন্টফ "ডেসিমাল:%d\nহেক্সাডেসিমাল:%x\nঅক্টাল:%o\n" 64 64 64
এটি আউটপুট করবে:
দশমিক:64 হেক্সাডেসিমাল:40অক্টাল:100
নম্বরটি 64 ফর্ম্যাটারে 3 বার পাস করা হয় এবং তিনটি ভিন্ন ফর্ম্যাটে প্রদর্শিত হয়৷
৷সুন্দর আউটপুট তৈরি করা
নিচের উদাহরণটি printf ব্যবহার করে একটি ফর্ম্যাট করা টেবিল আউটপুট করে - আমরা মন্তব্যে যাওয়ার সাথে সাথে আমি ব্যাখ্যা করব, যাতে এটি কী ঘটছে তা পরিষ্কার:
#/bin/bash# শিরোনাম পাঠ্যের বিন্যাসটি সংজ্ঞায়িত করুন# এটি একটি নতুন লাইন (\n) এর পরে 15টি অক্ষরের একটি বাম-সারিবদ্ধ স্ট্রিং (%-15s), তারপরে 15টি অক্ষরের একটি স্ট্রিং ( %15s), অবশেষে 10টি অক্ষরের একটি স্ট্রিং (%10s) এবং আরেকটি newlineheader_format="\n %-15s %15s %10s\n"# প্রতিটি সারিতে ডেটার বিন্যাস সংজ্ঞায়িত করুন# প্রথম দুটি এন্ট্রি তাদের মিরর করে হেডারে, কিন্তু চূড়ান্তটি একটু ভিন্ন - 2 দশমিক স্থান সহ একটি ভাসমান সংখ্যা বিন্যাস নির্দিষ্ট করা হয়েছে, এবং টেবিলের জন্য কলামের নাম সম্বলিত আর্গুমেন্টগুলি সরবরাহ করা হয়েছে# printf হেডার_ফরম্যাট নেবে, এবং প্রদত্ত স্পেসিফিকেশনে ফরম্যাট করা বৈশিষ্ট্যগুলি থেকে মানগুলি সন্নিবেশ করবে, তারপর এটিপ্রিন্টফ "$header_format" "CAR BRAND" প্রিন্ট করবে "COLOUR" "TOP SPEED"# টেবিল হেডারের নিচে অনুভূমিক রেখাটি প্রিন্ট করুন# এখানে, printf একটি সমান চিহ্ন প্রিন্ট করতে ব্যবহৃত হয়। ব্রেস এক্সপেনশন (কোঁকড়া ধনুর্বন্ধনী) হল একটি শেল স্ক্রিপ্টিং শর্টকাট যা 1 থেকে 50 এর মধ্যে প্রতিটি সংখ্যার জন্য printf কমান্ড চালাবে, একটি লাইনপ্রিন্টফ '=%.0s' তৈরি করতে 50 বার চিহ্নটি পুনরাবৃত্তি করবে {1..50}# প্রতিটি মুদ্রণ করুন row_format ব্যবহার করে ডেটার সারি। প্রতিটি লাইনে (একটি ব্যাকস্ল্যাশ এবং একটি লাইন রিটার্ন দ্বারা নির্দেশিত) তিনটি মান রয়েছে - গাড়ির ব্র্যান্ড, রঙ এবং সর্বোচ্চ গতি# স্পেস সহ যে কোনও মান উদ্ধৃত করা প্রয়োজন কারণ মানগুলি স্পেস দ্বারা পৃথক করা হয়েছে এবং printf বলতে সক্ষম হবে না যেখানে একটি মান শেষ হয় এবং আরেকটি শুরু হয় "$row_format" \Toyota Blue 100 \Ford "হালকা সবুজ" 78.3875 \"জেনারেল মোটরস" বেগুনি 15.96
এই স্ক্রিপ্টটি চালানোর ফলে আউটপুট হবে:
<প্রি>কার ব্র্যান্ডের রঙ টপ স্পিড==================================================Toyota Blue 100.00Ford Light Green 78.39General Motors Purple 15.96printf দ্বারা ডেটা কীভাবে ফর্ম্যাট করা হয়েছে তা সতর্কতার সাথে দেখুন এখানে. যেখানে হেডার এবং সারিগুলির জন্য একটি নির্দিষ্ট অক্ষর দৈর্ঘ্যের স্ট্রিংগুলি নির্দিষ্ট করা হয়েছিল, পাঠ্যটি সারিবদ্ধ হয়। শীর্ষ গতি দুটি দশমিক স্থানে বিন্যাস করা হয়েছে এবং সঠিক অবস্থানে স্থাপন করা হয়েছে। প্রথম কলামের জন্য নির্দিষ্ট করা ছাড়া পাঠ্যটি ডান-সারিবদ্ধ।
অপেক্ষাকৃত অল্প পরিমাণে সিনট্যাক্স সহ, পড়া কঠিন ডেটা দরকারী তথ্যে পরিণত হয়েছে৷
আকাশের সীমা
আপনি printf ব্যবহার করার জন্য আপনার নিজের কারণগুলি নিয়ে আসবেন৷ - স্ক্রিপ্টগুলির জন্য সুন্দর মেনু সহ কমান্ড-লাইন ইন্টারফেস তৈরি করা, ডাটাবেস প্রশ্নের ফলাফলগুলি সারণী করা - এটি আপনার ব্যাগে থাকা একটি শক্তিশালী হাতিয়ার, বিশেষ করে যদি আপনি অনফর্ম্যাটেড টেক্সট ডাম্প করার পরিবর্তে একটি চটকদার চেহারার শেল স্ক্রিপ্ট দিয়ে কাউকে প্রভাবিত করতে চান পর্দা।
আপনি printf একত্রিত করতে পারেন লিনাক্সে অন্যান্য টেক্সট হ্যান্ডলিং কমান্ডের সাথে।