সাজানো তালিকাগুলি মার্জ করুন


5

আমার কাছে কয়েকটি .txt ফাইল রয়েছে (একই ডিরেক্টরিতে) যা দেখতে দেখতে এটি:

   123 carrot
    50 apple
    13 tomato
     5 potato
     2 pear

এবং

   100 carrot
    10 apple
     3 tomato
     2 potato

আমার সেগুলি একটি বাছাই করা তালিকায় মার্জ করা দরকার। সুতরাং আমার যদি কেবল দুটি উপরে তালিকা থাকে তবে আমি পেতাম

   223 carrot
    60 apple
    16 tomato
     7 potato
     2 pear

শেল কমান্ড দিয়ে এটি করার কোনও সহজ উপায় আছে, বা আমার কোড লেখা শুরু করা উচিত?

ধন্যবাদ!

উত্তর:


4

"শেল কমান্ড" এবং "কোড" এর মধ্যে রেখাটি কোথায়? এই উদাহরণটি সম্ভবত সেই রেখার বাইরে, তবে এটি কেবলমাত্র একীকরণের কাজ awkযা আমি ইতিমধ্যে অন্য (আরও বিস্তৃত) উদ্দেশ্যে লিখেছি, তাই আমি এটি পোস্টও করতে পারি।

ধরে নেওয়া যাক ফাইল ডিরেক্টরির মধ্যে উপস্থিত রয়েছে dir/, awkযেমন তাদের যোগফল পারে:

awk '
    {fruits[$2]+=$1}
    END { for (fruit in fruits) {printf "%6s %s\n", fruits[fruit], fruit} }
' dir/* | sort -rn

ভাঙ্গন:

  • সমস্ত ফাইলের প্রতিটি লাইন পরীক্ষা করে দেখুন এবং অ্যারের মধ্যে সেই ফলের সূচকের বিদ্যমান মানের সাথে প্রথম ক্ষেত্রের মান যুক্ত করুন fruits(বা এটি উপস্থিত না থাকলে সূচকটি তৈরি করুন)।
  • ফাইলগুলি ট্র্যাভার করা হয়ে গেলে, সূচকগুলিতে লুপ করুন fruitsএবং আপনার নির্দিষ্ট বিন্যাসে তাদের মান এবং তাদের নাম মুদ্রণ করুন।
  • অ্যারে বাছাই awkকরা সম্ভব, তবে কেবল ব্যবহারের জন্য এটি চোখের কাছে অনেক সহজ sort-rnঅবতরণ ক্রমে সংখ্যাসূচকভাবে সাজান।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.