উত্তর:
"ক্ষেত্র" শব্দটি প্রায়শই cutএবং এর মতো সরঞ্জামগুলির সাথে সম্পর্কিত awk। একটি ক্ষেত্র ডেটা কলামের মূল্য হিসাবে সমান হবে, যদি আপনি ডেটা নেন এবং নির্দিষ্ট অক্ষর ব্যবহার করে পৃথক করেন। সাধারণত এটি করতে ব্যবহৃত চরিত্রটি হ'ল ক Space।
তবে বেশিরভাগ সরঞ্জামের ক্ষেত্রে এটি কনফিগারযোগ্য। উদাহরণ স্বরূপ:
awk -F"," ...- কমা দ্বারা পৃথক হবে (ie ,)।cut -d"," ...- কমা দ্বারা পৃথক হবে (ie ,)।এই প্রথমটি দেখায় যে কীভাবে awkস্থানগুলিতে স্বয়ংক্রিয়ভাবে বিভক্ত হবে।
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
এটি একটি cutস্পেসে কীভাবে বিভক্ত হবে তা দেখায় ।
$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.
এখানে আমাদের কাছে কলামের ডেটাগুলির একটি CSV তালিকা রয়েছে যা আমরা cutকলাম 1 এবং 4 ফিরিয়ে দিতে ব্যবহার করছি ।
$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4
আওকও এটি করতে পারে:
$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4
বিভিন্ন বিচ্ছেদ চরিত্রের সাথে কাজ করতেও আওক আরও কিছুটা পারদর্শী। এটি Tabsএকই সাথে Spacesযেখানে তারা একই সাথে আন্তঃ মিশ্রিত হচ্ছে সেগুলি নিয়ে এখানে কাজ করে:
$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.
এই স্যুইচটি সম্পর্কে শ্রদ্ধার সাথে, এটি কেবল এমন cutকোনও লাইন প্রিন্ট না করার কথা বলছে যা -dস্যুইচের মাধ্যমে নির্দিষ্ট করা ডিলিমিটার অক্ষর ধারণ করে না ।
বলুন আমাদের এই ফাইলটি ছিল।
$ cat sample.txt
This is a space string.
This is a space and tab string.
Thisstringcontainsneither.
দ্রষ্টব্য: উপরের ২ য় স্ট্রিংয়ে ফাঁকা স্থান এবং ট্যাব রয়েছে।
এখন যখন আমরা এই স্ট্রিংগুলি স্যুইচ cutসহ এবং ব্যবহার না করে প্রক্রিয়া করি -s:
$ cut -d" " -f1-6 sample.txt
This is a space string.
This is a space
Thisstringcontainsneither.
$ cut -d" " -f1-6 -s sample.txt
This is a space string.
This is a space
দ্বিতীয় উদাহরণে আপনি দেখতে পাচ্ছেন যে -sস্যুইচ আউটপুট থেকে ডিলিমিটার ধারণ করে না এমন কোনও স্ট্রিং বাদ দিয়েছে Space।
পসিক্স অনুসারে একটি ক্ষেত্র হ'ল IFS" ইনপুট ফিল্ড বিভাজক (বা অভ্যন্তরীণ ক্ষেত্র বিভাজক ) " এর যে কোনও অক্ষর দ্বারা সীমানা করা রেখার কোনও অংশ " । বাশ দিয়ে আপনি printf '%q\n' "$IFS"এর মান দেখতে চালাতে পারবেন ।
cutযার দ্বারা প্রশ্ন জিজ্ঞাসা করা হয়েছিল।
cut -d "$IFS"awk -F"[ \t\n]"
এটি প্রশ্নে থাকা ইউটিলিটির উপর নির্ভর করে, তবে cutএকটি "ক্ষেত্র" পাঠ্যের একটি লাইনের শুরুতে শুরু হয় এবং এতে প্রথম ট্যাব পর্যন্ত সমস্ত কিছু অন্তর্ভুক্ত থাকে। প্রথম ট্যাবটির পরে দ্বিতীয় ক্ষেত্রটি পরবর্তী ট্যাব পর্যন্ত চলে। এবং তৃতীয়, চতুর্থ, ... এর জন্য সমস্ত কিছু ট্যাবগুলির মধ্যে, বা শুরু-লাইন এবং ট্যাবের মধ্যে বা ট্যাব এবং শেষের-লাইনের মধ্যে।
"-D" বিকল্পের সাহায্যে আপনি কোনও ক্ষেত্রের ডিলিমিটার উল্লেখ না করে: cut -d: -f2আপনাকে প্রথম এবং দ্বিতীয় কোলনের (':') অক্ষরের মধ্যে সমস্ত কিছু দেবে।
অন্যান্য ইউটিলিটিগুলির বিভিন্ন সংজ্ঞা রয়েছে তবে একটি ট্যাব-চরিত্রটি সাধারণ। awkযদি cutখুব কড়া হয় তবে খুব ভাল হবে, কারণ awkএক বা একাধিক সাদা বর্ণের অক্ষরের উপর ভিত্তি করে ক্ষেত্রগুলি বিভক্ত করে। এটি অনেক পরিস্থিতিতে কিছুটা বেশি প্রাকৃতিক তবে আপনাকে কিছুটা বাক্য গঠন জানতে হবে। অনুযায়ী দ্বিতীয় ক্ষেত্র মুদ্রণ করতে awk:
awk '{print $2}'
sortতিনিই আমাকে চালিত করেন। আমার বর্তমান sortপুরুষ পৃষ্ঠাটি ফিল্ড সেপারেটরের জন্য "নন-ফাঁকা থেকে ফাঁকা স্থানান্তর" এর মতো কিছু বলে something কিছু কারণে sortক্ষেত্রগুলি সঠিকভাবে সংজ্ঞায়িত করার জন্য কয়েকটি চেষ্টা করে । joinস্পষ্টতই "হোয়াইটস্পেস দ্বারা বিস্মিত" ক্ষেত্রগুলি ব্যবহার করে, এটিই awkডিফল্টরূপে করণীয়।
গল্পটির নৈতিক হ'ল সতর্কতা অবলম্বন করা, এবং যদি আপনি না জানেন তবে পরীক্ষা করুন।
"ক্ষেত্র" শব্দটি সাধারণত লিনাক্সের সাথে সম্পর্কিত নয়, তবে নির্দিষ্ট প্রোগ্রামগুলির সাথে সম্পর্কিত। সুতরাং cutএর চেয়ে আলাদা ধরণের ক্ষেত্র ব্যবহার করে sort।
এর সাহায্যে cutআপনি ফিল্ডটি কী তা নিজেই সংজ্ঞায়িত করেন, বিকল্প -d বিকল্পের সাথে একটি ক্ষেত্রের ডিলিমিটার নির্দিষ্ট করে, যা প্রতিটি লাইনের ক্ষেত্রগুলি পৃথক করে।
যদি আপনার ডেটা লাইনে কলোন দ্বারা পৃথক করা হয়, আপনি একত্রিত করতে পারেন -dএবং -fক্ষেত্রগুলি (বা কলাম) 2, 3 এবং 6 এর মতো পেতে:
echo 'a:b:c::d:e:f' | cut -d : -f 2-3,6
আপনি যখন cutকমান্ড ব্যবহার করেন তখন এটি দুটি প্রধান আর্গুমেন্ট লাগে
-d: যা ডিলিমিটারের জন্য দাঁড়ায়
-f: যা ইনপুট ফাইল থেকে কাটতে ক্ষেত্রের পক্ষে দাঁড়ায়
Ex. cut - d "|" - f1, 2 input_filename
এখানে outputডিলিমিটার দ্বারা পৃথক করা হবে "|" এবং এটি ইনপুট ফাইল থেকে 2 টি ক্ষেত্র কেটে দেবে
আপনার ফাইলটিতে নিম্নলিখিত লাইন থাকলে
Alex|120000|Admin|1999
তারপরে এটি 2 ক্ষেত্রগুলি কেটে ফেলবে
Alex|120000
cutসাধারণ ক্ষেত্রে, যেখানে ডিলিমিটারটি একটি একক অক্ষর এবং আপনি একই ক্রমে ইনপুট ক্ষেত্রগুলির একটি উপসেট আউটপুট করতে চান (যদিও আমি নির্দিষ্ট -f3,2,1করে দিলেও এটি একইরূপে কাজ করে -f1,2,3) দুর্দান্ত।
awkওয়ান-লাইনারগুলি অনেক বেশি নমনীয়, যেমন ইনপুট ফিল্ড বিভাজকটি কোনও সাদা স্থান ( awkডিফল্ট) হতে পারে , বা আপনি যখন অন্য কোনও ক্রমে বা কোনও নির্দিষ্ট বিন্যাসে ক্ষেত্রগুলি আউটপুট দিতে চান।
উদাহরণস্বরূপ wc -l myfile | awk '{print $1}'বা ls -l file1 file2 | awk '{printf "%s,%s:%s\n", $9, $7, $3}'খুব সহজ, তবে এটি করা কঠিন cut।
আমি পূর্ববর্তী পোস্টারগুলির সাথে একমত যে ক্ষেত্রগুলি / কীগুলি sortখুঁজে বের করা শক্ত! ক্ষেত্রগুলি ক্ষেত্রগুলি joinএকই হিসাবে কাজ করে বলে মনে হচ্ছে cut, যদিও joinবিকল্পগুলি ভুল হওয়া সহজ।
echo '$IFS' | cat -vetডিফল্ট মানটি কীভাবে দেখায় তা করতে একটি করুনshell।