কাট কমান্ডের জন্য 'ফিল্ড' গঠন কী?


16

উদাহরণস্বরূপ, cutকমান্ডটি প্যারামিটার -f নিতে পারে, যা অনুসারেman

কেবলমাত্র এই ক্ষেত্রগুলি নির্বাচন করুন; -s বিকল্পটি সুনির্দিষ্ট না করা থাকলে যে কোনও লাইনে কোনও ডিলিমিটার অক্ষর নেই সেগুলিও মুদ্রণ করুন

এই প্রসঙ্গে, ক্ষেত্রটি কী?

উত্তর:


19

"ক্ষেত্র" শব্দটি প্রায়শই cutএবং এর মতো সরঞ্জামগুলির সাথে সম্পর্কিত awk। একটি ক্ষেত্র ডেটা কলামের মূল্য হিসাবে সমান হবে, যদি আপনি ডেটা নেন এবং নির্দিষ্ট অক্ষর ব্যবহার করে পৃথক করেন। সাধারণত এটি করতে ব্যবহৃত চরিত্রটি হ'ল ক Space

তবে বেশিরভাগ সরঞ্জামের ক্ষেত্রে এটি কনফিগারযোগ্য। উদাহরণ স্বরূপ:

  • awk = 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


8

পসিক্স অনুসারে একটি ক্ষেত্র হ'ল IFS" ইনপুট ফিল্ড বিভাজক (বা অভ্যন্তরীণ ক্ষেত্র বিভাজক ) " এর যে কোনও অক্ষর দ্বারা সীমানা করা রেখার কোনও অংশ " । বাশ দিয়ে আপনি printf '%q\n' "$IFS"এর মান দেখতে চালাতে পারবেন ।


echo '$IFS' | cat -vet ডিফল্ট মানটি কীভাবে দেখায় তা করতে একটি করুন shell
C0deaaalalus

1
আইএফএস বেশিরভাগ উদ্দেশ্যে (সমস্ত নয়) শেল দ্বারা ব্যবহৃত হয়, তবে অন্যান্য প্রোগ্রামগুলি দ্বারা এবং বিশেষত নয় cutযার দ্বারা প্রশ্ন জিজ্ঞাসা করা হয়েছিল।
dave_thompson_085

জঞ্জাল থেকে পৃথক, কাটাও একবারে কেবলমাত্র একটি ডিলিমিটারকে সমর্থন করে, তাই cut -d "$IFS"awk -F"[ \t\n]"
ত্রুটিও ঘটবে

2

এটি প্রশ্নে থাকা ইউটিলিটির উপর নির্ভর করে, তবে cutএকটি "ক্ষেত্র" পাঠ্যের একটি লাইনের শুরুতে শুরু হয় এবং এতে প্রথম ট্যাব পর্যন্ত সমস্ত কিছু অন্তর্ভুক্ত থাকে। প্রথম ট্যাবটির পরে দ্বিতীয় ক্ষেত্রটি পরবর্তী ট্যাব পর্যন্ত চলে। এবং তৃতীয়, চতুর্থ, ... এর জন্য সমস্ত কিছু ট্যাবগুলির মধ্যে, বা শুরু-লাইন এবং ট্যাবের মধ্যে বা ট্যাব এবং শেষের-লাইনের মধ্যে।

"-D" বিকল্পের সাহায্যে আপনি কোনও ক্ষেত্রের ডিলিমিটার উল্লেখ না করে: cut -d: -f2আপনাকে প্রথম এবং দ্বিতীয় কোলনের (':') অক্ষরের মধ্যে সমস্ত কিছু দেবে।

অন্যান্য ইউটিলিটিগুলির বিভিন্ন সংজ্ঞা রয়েছে তবে একটি ট্যাব-চরিত্রটি সাধারণ। awkযদি cutখুব কড়া হয় তবে খুব ভাল হবে, কারণ awkএক বা একাধিক সাদা বর্ণের অক্ষরের উপর ভিত্তি করে ক্ষেত্রগুলি বিভক্ত করে। এটি অনেক পরিস্থিতিতে কিছুটা বেশি প্রাকৃতিক তবে আপনাকে কিছুটা বাক্য গঠন জানতে হবে। অনুযায়ী দ্বিতীয় ক্ষেত্র মুদ্রণ করতে awk:

awk '{print $2}'

sortতিনিই আমাকে চালিত করেন। আমার বর্তমান sortপুরুষ পৃষ্ঠাটি ফিল্ড সেপারেটরের জন্য "নন-ফাঁকা থেকে ফাঁকা স্থানান্তর" এর মতো কিছু বলে something কিছু কারণে sortক্ষেত্রগুলি সঠিকভাবে সংজ্ঞায়িত করার জন্য কয়েকটি চেষ্টা করে । joinস্পষ্টতই "হোয়াইটস্পেস দ্বারা বিস্মিত" ক্ষেত্রগুলি ব্যবহার করে, এটিই awkডিফল্টরূপে করণীয়।

গল্পটির নৈতিক হ'ল সতর্কতা অবলম্বন করা, এবং যদি আপনি না জানেন তবে পরীক্ষা করুন।


2

"ক্ষেত্র" শব্দটি সাধারণত লিনাক্সের সাথে সম্পর্কিত নয়, তবে নির্দিষ্ট প্রোগ্রামগুলির সাথে সম্পর্কিত। সুতরাং cutএর চেয়ে আলাদা ধরণের ক্ষেত্র ব্যবহার করে sort

এর সাহায্যে cutআপনি ফিল্ডটি কী তা নিজেই সংজ্ঞায়িত করেন, বিকল্প -d বিকল্পের সাথে একটি ক্ষেত্রের ডিলিমিটার নির্দিষ্ট করে, যা প্রতিটি লাইনের ক্ষেত্রগুলি পৃথক করে।

যদি আপনার ডেটা লাইনে কলোন দ্বারা পৃথক করা হয়, আপনি একত্রিত করতে পারেন -dএবং -fক্ষেত্রগুলি (বা কলাম) 2, 3 এবং 6 এর মতো পেতে:

echo 'a:b:c::d:e:f' | cut -d : -f 2-3,6

1

আপনি যখন cutকমান্ড ব্যবহার করেন তখন এটি দুটি প্রধান আর্গুমেন্ট লাগে

-d: যা ডিলিমিটারের জন্য দাঁড়ায়

-f: যা ইনপুট ফাইল থেকে কাটতে ক্ষেত্রের পক্ষে দাঁড়ায়

Ex. cut - d "|"  - f1, 2 input_filename

এখানে outputডিলিমিটার দ্বারা পৃথক করা হবে "|" এবং এটি ইনপুট ফাইল থেকে 2 টি ক্ষেত্র কেটে দেবে

আপনার ফাইলটিতে নিম্নলিখিত লাইন থাকলে

Alex|120000|Admin|1999

তারপরে এটি 2 ক্ষেত্রগুলি কেটে ফেলবে

Alex|120000

আপনার দৃষ্টান্ত ভুল জায়গাগুলির কারণে সম্পূর্ণরূপে নষ্ট হয়ে গেছে, এমনকি সঠিক হলেও এটি 4 বছর পূর্বে দেওয়া উত্তরগুলিতে কিছুই যোগ করে না।
dave_thompson_085

0

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বিকল্পগুলি ভুল হওয়া সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.