1 কলামের সর্বাধিক মান সন্ধান করুন এবং ফাইল থেকে কলাম 2 থেকে সম্পর্কিত রেকর্ড মুদ্রণ করুন


19

কীভাবে 1 কলাম থেকে সর্বাধিক মান খুঁজে পাবেন এবং একটি ফাইল যা থেকে রেকর্ডের সংখ্যার সংখ্যা রয়েছে তা সম্পর্কিত পাথ অবস্থানটি প্রতিধ্বনিত করুন।

$ cat version.log
112030  /opt/oracle/app/oracle/product/11.2.0
121010  /opt/oracle/app/oracle/product/12.1.0

প্রত্যাশিত আউটপুট:

/opt/oracle/app/oracle/product/12.1.0

উত্তর:


23

এই কাজ করা উচিত:

awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log

-v max=0সেট পরিবর্তনশীল maxকরতে 0হলে, প্রতিটি লাইনে জন্য, প্রথম মাঠের বর্তমান মান সাথে তুলনা করা হয় max। যদি এটি আরও বেশি maxহয় তবে 1 ম ক্ষেত্রের মানকে wantসেট করা হয় এবং বর্তমান লাইনে সেট করা হয়। প্রোগ্রামটি যখন পুরো ফাইলটি প্রক্রিয়া করে, তখন এর বর্তমান মানটি wantমুদ্রিত হয়।

সম্পাদন করা

আমি awkসমাধানটির আগে পরীক্ষা করিনি এবং এটি সরবরাহ করা আমার পক্ষে খারাপ। যাইহোক, উত্তরের সম্পাদিত সংস্করণটি কাজ করা উচিত (এটি ঠিক করার জন্য টেরডনকে ধন্যবাদ) এবং আমি নীচেও পরীক্ষা করেছিলাম।

sort -nrk1,1 filename | head -1 | cut -d ' ' -f3

আমি sortযেখানে প্রথম ক্ষেত্রের মধ্যে রয়েছি যেখানে,

  • -n সংখ্যার সাজান নির্দিষ্ট করে।
  • -r সারণির ফলাফলের বিপরীত নির্দিষ্ট করে।
  • -k1,1 বাছাইয়ের জন্য প্রথম ক্ষেত্র নির্দিষ্ট করে।

এখন, বাছাইয়ের পরে আমি আউটপুটটি পাইপ করছি এবং কেবল প্রথম ফলাফল পাচ্ছি যা ফলাফলের মধ্যে আমাকে কলাম 1-এর সর্বোচ্চ সংখ্যায় দেবে।

এখন, অবশেষে আমি এটিকে cutস্থান হিসাবে নির্দিষ্ট করা ডিলিমিটার দিয়ে পাইপ করব এবং এটি -f3যা আউটপুট হিসাবে প্রিন্ট করব ।

পরীক্ষামূলক

cat filename
112030   /opt/oracle/app/oracle/product/11.2.0
121010   /opt/oracle/app/oracle/product/12.1.0
2312     /hello/some/other/path
3423232  /this/is/really/big/number
342      /ok/not/the/maximum/number
9999899  /Max/number
9767     /average/number

উপরের হিসাবে ইনপুটটির জন্য উপরের কমান্ডটি চালানোর পরে, আমি আউটপুট হিসাবে পাই

/Max/number

অ্যাডাব্ল্যাক ম্যাক্স স্ট্রিং ফিল্ডকে সংখ্যার সাথে তুলনা করে না। আপনি কেন দ্বিতীয় পন্থা দিয়েছেন?
সাজুউক

7

আপনি এটি দিয়ে করতে পারেন AWK

$ awk '{if(max<$1){max=$1;line=$2}}END{print line}' file 
/opt/oracle/app/oracle/product/12.1.0

এখানে প্রতিটি লাইনের প্রথম কলামটি ভেরিয়েবলের সাথে তুলনা করা হয় max(যা প্রাথমিকভাবে 0 হয়)। প্রথম কলামে যদি গ্রেটেডের মান থাকে maxতবে দ্বিতীয় কলামটি ভেরিয়েবলে সঞ্চিত থাকে তবে lineএটি ফাইলের প্রতিটি লাইন ধরে চলতে থাকবে।

ফাইল শেষে END নিয়মেরline ভেরিয়েবল মুদ্রণের জন্য নির্বাহ করা হয়।



3

sort -k1 -n filename | tail -1 | awk '{print $2}'


1
এটি কাজ করা উচিত তবে অকার্যকর, কারণ যখন সর্বাধিক সন্ধানের কাজটি করা হয় তখন বাছাই করা ওভারকিল হয়।
jw013

2

sortকমান্ড ব্যবহার করে আপনি এটি বাছাই করতে পারেন

sort -r version.log | head -n1 | awk '{print $2}'

আউটপুট:

/opt/oracle/app/oracle/product/12.1.0

আপনি দ্বিতীয় মানটি মুদ্রণ করতে চান কেবল এই বিড়ালটির ভার্সন.লগ | সাজানো -আর | মাথা -n1 | awk -F "" '{2} প্রিন্ট করুন
সিকিউরিটি বিস্ট

দয়া করে আপনার টার্মিনালের স্ক্রিনশট পোস্ট করবেন না। পরিবর্তে কেবল টেক্সট আটকান। এছাড়াও, এর প্রয়োজন নেই cat, বাছাই করা সরাসরি ইনপুট ফাইলগুলি নিতে পারে।
টেরডন

-2
sort -nrk1,1 version.log | head -1 |awk '{print $2}’

2
এটি কি স্বীকৃত উত্তরের পুনরায় হ্যাশের মতো দেখাচ্ছে? দয়া করে এটি কীভাবে আলাদা তা ব্যাখ্যা করুন।
স্টিফেন রাউচ

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