লিনাক্সে কলাম কমান্ড ব্যবহারের বিভিন্ন উপায়


আপনি কি কখনও সিএসভি ফাইলগুলির সাথে কাজ করার এবং কাঠামোগত টবুলার ফর্ম্যাটে আউটপুট উত্পাদন করার মতো পরিস্থিতিতে পড়েছেন? সম্প্রতি আমি কোনও ফাইলে ডেটা ক্লিনিজিংয়ের সাথে কাজ করছি যা সঠিক কাঠামোতে নেই। প্রতিটি কলামের মধ্যে এর অনেকগুলি শ্বেতস্পেস রয়েছে এবং ডাটাবেসগুলিতে এগিয়ে যেতে আমাকে CSV ফর্ম্যাটে রূপান্তর করতে হবে। সিএসভি ফর্ম্যাটে আউটপুট পরিষ্কার এবং তৈরি করার পরে, আমার আউটপুটটি দৃশ্যত CSV ফাইলে ডেটা অখণ্ডতা যাচাই করার জন্য আবেদন করছে না। এই সময়টি "কলাম" কমান্ডটি আমার কাজে আসে।

ম্যানপেজ অনুযায়ী, কলাম কমান্ড "কলামেট তালিকা"। সহজ কথায় কলামটি হ'ল একটি সাধারণ ইউটিলিটি যা আপনার উত্স ফাইলের কাঠামোর উপর ভিত্তি করে আপনার আউটপুটটিকে কলাম ফর্ম্যাট (সারি এবং ক্ষেত্র) এ ফর্ম্যাট করতে পারে। কলাম কমান্ডটি ইউজ-লিনাক্স প্যাকেজের অংশ।

এখানে লক্ষণীয় একটি গুরুত্বপূর্ণ বিষয় হ'ল কলাম কমান্ড এই সম্পর্কে আরও জানার জন্য বাগ রিপোর্টে আলাদাভাবে আচরণ করে।

$ dpkg -S $(which column)

প্রদর্শনের উদ্দেশ্যে, আমি CentOS 7 ব্যবহার করছি এবং উবুন্টু এবং CentOS 7 এর মধ্যে বিভিন্ন বিকল্প দেখাব। কলাম সংস্করণটি পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান run এই কমান্ডটি ইউজ-লিনাক্স প্যাকেজ সংস্করণটি প্রদর্শন করবে।

$ column --version  # will not work in Debian/ubuntu

আপনি নীচের কমান্ডগুলি চালিয়ে ব্যবহার-লিনাক্সের সংস্করণও পরীক্ষা করতে পারেন।

$ rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
$ dpkg -l | grep -i util-linux    # Ubuntu

কলাম কমান্ডটি ব্যবহার করার আগে শুরু করার জন্য একটি ভাল জায়গা হ'ল ম্যান পৃষ্ঠা এবং এর বিকল্পগুলি অন্বেষণ করা হবে।

$ man column

ট্যাবুলার ফরম্যাটে ফাইলের সামগ্রী তালিকাবদ্ধ করুন

কলাম কমান্ড -t পতাকা সহ একটি আর্গুমেন্ট হিসাবে ফাইলের নাম দিয়ে একটি টেবিল তৈরি করতে পারে। আমি ইনপুট ফাইল হিসাবে/ইত্যাদি/পাসডাব্লুড ব্যবহার করছি।

$ column -t /etc/passwd

উপরের চিত্রটি দেখে আপনি ভাবতে পারেন এটি আমাদের প্রত্যাশা মতো নয় এবং আউটপুটটি অদ্ভুত দেখাচ্ছে। হ্যাঁ! তুমি ঠিক. একটি সারণী তৈরি করার সময় কলামগুলি স্থানটিকে ডিফল্ট ডিলিমিটার হিসাবে বিবেচনা করে। এই আচরণটি একটি কাস্টম ডিলিমিটার পাস করে ওভাররাইড করা যেতে পারে।

কাস্টম ডেলিমেটার

কাস্টম ডিলিমিটারগুলি আপনাকে কাজ করার জন্য বিস্তৃত বিকল্প দেয়। একটি কাস্টম ডিলিমিটার তৈরি করতে একটি ডিলিমিটারের পরে -s পতাকা ব্যবহার করুন। এখন আমরা ":" কে/ইত্যাদি/পাসডাব্লু ফাইল বিভক্ত করার জন্য একটি সীমানা হিসাবে ব্যবহার করব।

$ column -s ":"  -t /etc/passwd

উপরের চিত্রটি দেখুন যেখানে টেবিলটি সুন্দরভাবে ফর্ম্যাট এবং কাঠামোগত। ইউজার-লিনাক্স সংস্করণ থেকে ২.২৩ বিকল্প -এস লোভী না হয়ে পরিবর্তন করা হয়েছে।

এখন উবুন্টুতে একই কমান্ডটি চালান এবং ফলাফলটি লোভী হবে। এর কারণ উবুন্টুতে কলাম কমান্ড (bsdmainutils) একাধিক সংলগ্ন শব্দকে একক শব্দ হিসাবে বিবেচনা করবে।

$ column -s ":"  -t /etc/passwd

এই আচরণটি কাটিয়ে উঠতে -n পতাকা ব্যবহার করুন।

$ column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu

ফাইল আউটপুটে হোয়াইট খালি লাইন উপেক্ষা করুন

আপনার ইনপুট ফাইলে ফাঁকা রেখা থাকলে ডিফল্ট কলাম কমান্ড এটিকে উপেক্ষা করে। আমার ইনপুট ফাইলটি দেখুন যা সিএসভি ফর্ম্যাটে রয়েছে এবং আমি প্রতিটি লাইনের মধ্যে একটি ফাঁকা রেখা যুক্ত করেছি। এই ইনপুট ফাইলটি দিয়ে আমরা আগের মতো এখন একটি টেবিল তৈরি করি।

$ column -t -s ";" dummy.txt

উপরের চিত্রটি থেকে আপনি দেখতে পারবেন আমার ইনপুট ফাইল ডামি.টিএসটিএসটির ফাঁকা লাইন রয়েছে এবং আমি যখন একটি টেবিল তৈরি করার চেষ্টা করি তখন খালি লাইন উপেক্ষা করা হয়।

দ্রষ্টব্য: কলাম কমান্ডের "bsdmainutils/util-linux" উভয়ের জন্য এটিই ডিফল্ট আচরণ। তবে কলামে (bsdmainutils) -e পতাকা পাস করে এই আচরণটি ওভাররাইড করার বিকল্প রয়েছে।

$ column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu

উপরের চিত্রটি থেকে আপনি দেখতে পাচ্ছেন যে টেবিলটি সঠিকভাবে ফর্ম্যাট হয়েছে এবং খালি লাইনগুলি এড়ানো হবে না।

ফাইল আউটপুট বিভাজক

ডিফল্টরূপে, দুটি সাদা স্পেস আউটপুট বিভাজক হিসাবে ব্যবহৃত হবে। এই আচরণটি -ও পতাকা পেরিয়ে ওভাররাইড করা যেতে পারে। কলামে (বিএসডিমেইনটিলস) কোনও আউটপুট বিভাজক বিকল্প উপলব্ধ নেই।

$ column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro

ফাইল সারিগুলি কলামগুলিতে রূপান্তর করুন

-x পতাকাটি ব্যবহার করে আপনি সারিগুলিকে কলামে রূপান্তর করতে পারেন। এই আচরণটি কলাম কমান্ডের রেল এবং উবুন্টু উভয় রূপেই একই। এটি খুব কার্যকর বৈশিষ্ট্য যখন আপনাকে যখন awk বা কলাম কমান্ডের মাধ্যমে নির্দিষ্ট ক্ষেত্রটি দখল করতে হয় তখন এটি আপনার সিএসভি ফাইলের জন্য শিরোনামে রূপান্তর করতে হয়।

$ column -x fillcols.txt

আপনি যখন কোনও পতাকা ব্যবহার না করে কলাম কমান্ডটি চালাবেন তখন আচরণটি -x পতাকা পাস করার মতই হবে।

কলামের আকার খুঁজুন

কলামটি আপনার টার্মিনালের আকার অনুসন্ধান করতে একটি পরিবেশগত পরিবর্তনশীল (OL COLUMNS) ব্যবহার করে এবং ইকো কমান্ডটি ব্যবহারের আকারের ভিত্তিতে টেবিলের আকারটি টার্মিনালে প্রদর্শিত হবে।

$ echo $COLUMNS

নীচের চিত্রটি দেখুন। প্রাথমিকভাবে, আমি আমার টার্মিনালটিকে $COLUMNS আকারটি 60 এ সেট করে কলাম কমান্ড চালিয়েছি res আবার আমি আমার টার্মিনালটিকে OL COLUMNS আকারটি 114 এ সেট করে আবার কলাম কমান্ড চালিয়েছি res আমরা যখন টার্মিনালটির আকার পরিবর্তন করব তখন কলামটি টেবিলটি কীভাবে প্রিন্ট করে তা পার্থক্যটি দেখতে পাবেন।

$ column -t -s ":" /etc/passwd | head 5

এই নিবন্ধটির জন্য এটি। আপনার কোনও মতামত থাকলে তা মন্তব্য বিভাগে সরবরাহ করুন।