গ্রেপ দিয়ে আওক এবং কাটার মধ্যে সঠিক পার্থক্যগুলি কী? [বন্ধ]


30

আমরা জানি যে এই দুটি কৌশল ব্যবহার করে আমরা কোনও ফাইল থেকে লাইনের দ্বিতীয় কলামটি পেতে পারি:

awk '/WORD/ { print $2 }' filename

অথবা

grep WORD filename| cut -f 2 -d ' '

আমার প্রশ্নগুলি হ'ল:

  • উপরের দুটি কমান্ডের মধ্যে পার্থক্য কী?
  • কোনটি সেরা অভিনয় করেছেন?
  • awkওভার ব্যবহার করে cutএবং এর বিপরীতে কী কী সুবিধা রয়েছে ?
  • কোন বিকল্পগুলি awkআমাদের cutবিপরীতে দেয়?

এটা echo filenameনাকি cat filename?
অবিনাশ রাজ

@ অবিনাশরাজ দুঃখিত সম্পাদিত
নেটওয়ার্কার

উত্তর:


35

আপনার দুটি লাইনের মধ্যে সর্বাধিক বিশিষ্ট পার্থক্যটি ইনপুটটির উপর নির্ভর করবে। ফিল্ড ডিলিমিটার হিসাবে cutএকটি একক অক্ষর গ্রহণ করে -d(ডিফল্টটি টিএবি হচ্ছে), এবং সেই চরিত্রের প্রতিটি ঘটনাই একটি নতুন ক্ষেত্র শুরু করে। awkতবে এটি আরও নমনীয়। বিভাজকটি চলকতে রয়েছে এবং FSখালি স্ট্রিং (প্রতিটি ইনপুট অক্ষর পৃথক ক্ষেত্র তৈরি করে), একটি একক অক্ষর বা নিয়মিত প্রকাশ হতে পারে। একটি একক স্পেস ক্যারেক্টারের বিশেষ ক্ষেত্রে (ডিফল্ট) অর্থ হ'ল স্পেসের যে কোনও ক্রমকে বিভক্ত করা । এছাড়াও, awkশুষে ডিফল্টরূপে নেতৃস্থানীয় হোয়াইটস্পেস।

দয়া করে তুলনা করুন:

$ echo "abc def" | cut -f 2 -d ' '
def
$ echo "abc    def" | cut -f 2 -d ' '

$ echo " abc def" | cut -f 2 -d ' '
abc


$ echo "abc def" | awk '{ print $2 }'
def
$ echo "abc    def" | awk '{ print $2 }'
def
$ echo " abc def" | awk '{ print $2 }'
def

এখানে, awkফাঁকের ক্রমানুসারে বিভক্ত হয় abcএবং defযেখানে cutপ্রতিটি স্থানকে পৃথককারী হিসাবে গ্রহণ করে।

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


আমি উত্তর হিসাবে যা চাই, ধন্যবাদ আমি প্রশ্নটি উত্তর হিসাবে চিহ্নিত করব @ দুবু
নেটওয়ার্কার

1
cutসম্ভবত একা আওকের চেয়েও দ্রুত হতে পারে তবে এটি এতটা নিশ্চিত নয় যে grep ... | cutখাঁটি আওক থেকে দ্রুত হবে।
ওয়াইল্ডকার্ড

8

সাধারণভাবে বলতে গেলে, কোনও সরঞ্জাম যত বেশি বিশেষজ্ঞ, তত দ্রুত। সুতরাং বেশিরভাগ ক্ষেত্রেই আপনি প্রত্যাশা করতে পারেন cutএবং তার grepচেয়েও দ্রুত হতে sedএবং তার থেকেও দ্রুত হতে পারেন । যদি আপনি আরও জটিল সরঞ্জামগুলির একক অনুরোধের সাথে সরল সরঞ্জামগুলির দীর্ঘতর পাইপলাইনগুলির তুলনা করে থাকেন তবে থাম্বের কোনও নিয়ম নেই। এটি কেবল বৃহত ইনপুটগুলির সাথে গুরুত্বপূর্ণ (বলুন, কয়েক মিলিয়ন লাইন); সংক্ষিপ্ত ইনপুটগুলির জন্য, আপনি কোনও পার্থক্য দেখতে পাবেন না।sedawk

আরও জটিল সরঞ্জামগুলির সুবিধা হ'ল তারা আরও বেশি কিছু করতে পারে।

আপনার আদেশগুলি বিড়ালকে অযথা ব্যবহার করে। পরিবর্তে পুনঃনির্দেশটি ব্যবহার করুন (বিশেষত যদি আপনি গতির বিষয়ে উদ্বিগ্ন হন, যদিও আপনি সম্ভবত বেঞ্চমার্ক না চালিয়ে যাওয়া পর্যন্ত গতি সম্পর্কে উদ্বিগ্ন হওয়া উচিত নয়)।

<fileName awk '/WORD/ { print $2 }'
<fileName grep WORD | cut -f 2 -d ' '

এই আদেশগুলি প্রায় সমতুল্য। পার্থক্যগুলি হ'ল:

  • awk এবং grep এর বিভিন্ন regexp সিনট্যাক্স রয়েছে । অবর এবং grep -Eপ্রায় একই ধরণের রেজিএক্সপ্যাক সিনট্যাক্স (বর্ধিত নিয়মিত এক্সপ্রেশন) রয়েছে।
  • cut -d ' 'প্রতিটি স্বতন্ত্র স্থানের অক্ষরকে একটি সীমানার হিসাবে বিবেচনা করে। আওকের ডিফল্ট ডিলিমিটার হ'ল কোনও সাদা স্থান ক্রম, যা একাধিক স্পেস, একটি ট্যাব ইত্যাদি হতে পারে You আপনি বিচ্ছিন্ন হিসাবে স্বতঃস্ফূর্ত স্থান সিকোয়েন্সগুলি ব্যবহার করতে পারবেন না cut। Awk মধ্যে বিভাজক, কোন RegExp একটি একক স্থান, একক স্থান নিয়ে গঠিত (যা একটি বিশেষ ক্ষেত্রে অর্থ "কোনো হোয়াইটস্পেস ক্রম" অর্থাৎ ডিফল্ট) কোন RegExp ছাড়া অন্য মেলে ক্ষেত্র বিভাজক সেট পৃথক স্পেস ব্যবহার করতে: awk -F '[ ]' '/WORD/ {print $2}'

Op প্রোগ্রাম অপ্টিমাইজেশনের প্রথম বিধি: এটি করবেন না। প্রোগ্রাম অপ্টিমাইজেশনের দ্বিতীয় বিধি (কেবল বিশেষজ্ঞদের জন্য!): এটি এখনও করবেন না। - মাইকেল এ। জ্যাকসন


1

আপনার আদেশ,

cat fileName | awk '/WORD/ { print $2 }'

এমনকি আপনার catকমান্ডেরও দরকার নেই । আপনি চেষ্টা করতে পারেন,

awk '/WORD/ { print $2 }' filename

এবং নীচের কমান্ডটি আউটপুটটিকে বিড়াল থেকে গ্রেপ করে কাটাতে পুনঃনির্দেশ করে,

cat fileName | grep WORD | cut -f 2 -d ' '

সম্ভবত আমাদের আউটপুট পুনঃনির্দেশ এড়ানো আবশ্যক। আওক এক-লাইনে কাজ করে তবে কেবল cutএকটি grepনির্দিষ্ট রেখা পেতে একটি কমান্ডের প্রয়োজন যা নির্দিষ্ট শব্দ যুক্ত করে এবং এটি ডিলিমিটার স্পেস অনুযায়ী 2 কলামটি মুদ্রণ করে।

যদি কাটা ব্যর্থতা না ঘটে তবে আপনি কাজগুলিকে আঁকড়ে ধরে রাখতে পারেন।


3
PS আপনার গ্রেপের জন্য ক্যাট কমান্ডের দরকার নেই। আপনি ঠিক করতে পারেন grep WORD filename
ফুপস

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