উত্তর:
"ক্ষেত্র" শব্দটি প্রায়শই 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
।