একটি নির্দিষ্ট কলামের যোগফল দিন এবং কেবলমাত্র AWK ব্যবহার করে অন্যের অনন্য রেকর্ড নিন


1

আমার কাছে নিম্নলিখিতগুলির মতো একটি ইনপুট ফাইল রয়েছে:

19 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
20 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
21 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
23 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
24 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
27 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175

আমি একা 6 কলাম মান যোগফল করতে চান, এবং 4 র্থ, 5 ম, 9 ম এবং 10 ম কলামে, আমি ডুপ্লিকেট মুছে ফেলুন এবং হিসাবে একটি একক মান মুদ্রণ করতে চান PLএবং 2175

19 | 17 | 1 | {ডুপ্লিকেট এবং একক মান অপসারণ} | {ডুপ্লিকেট এবং একক মান অপসারণ} | {এখানে সমষ্টি} |{এখানে সমষ্টি} | {এখানে সমষ্টি} | {ডুপ্লিকেট অপসারণ } | {ডুপ্লিকেট অপসারণ}

আমি নিম্নলিখিত চেষ্টা করেছিলাম:

grep 0000000089181 ইনপুট ফাইল | awk -F'|' '
        { sum_p_all += $5} ;
        { sum_quantity += $6} ;
        { mean_p_unit = sum_p_all/sum_quantity} ;
        { sum_p_all2 = sum_p_all * 100} ;
        { mean_p_unit2 = mean_p_unit * 100}
END     { print sum_p_all2 " " sum_quantity " " mean_p_unit2 }'


1
আপনার কলামগুলি "|" দ্বারা পৃথক করা হয়েছে তা ধরে নেওয়া, এটি সহজেই করা যায়; তবে আপনার লক্ষ্য সম্পর্কিত বিবরণটি আপনার ডেটার সাথে মেলানো আমার পক্ষে কঠিন বলে মনে হচ্ছে: 6 নম্বরটি সংখ্যাটি নয়; আপনি কর্নেল 5 যোগ করুন, তারপরে কিছুটা জন্য ভাগ করুন; এবং আমি দেখতে পাচ্ছি না যে কীভাবে আপনার লক্ষ্যগুলি 3 টি কোল + + 'এস আউটপুট উত্পাদন করে। আপনি আবার ব্যাখ্যা করার চেষ্টা করতে পারেন?
gnometorule

আমার খারাপ: 6 সংখ্যাসূচক, তবে 5 যা আপনি যোগ করেন তাও নয়।
gnometorule

সুতরাং আপনি কি যোগফল চান? শুধুমাত্র 6 এর সংখ্যার অংশ? শুধু 14,5? দয়া করে সম্পাদনা আপনার প্রশ্ন এবং অন্তর্ভুক্ত প্রকৃত উদাহরণ আউটপুট। এছাড়াও, প্রতিটি কলামে আপনি কী যোগফল চান? পুরো ফাইলটির উপরে column কলামটির যোগফল?
টেরডন

দয়া করে আপনার প্রশ্নের নির্মল। উদাহরণস্বরূপ, আপনি বলেছিলেন, "আমি একা 6 এর কলামের মানটি যোগ করতে চাই", তবে আপনি 7 এবং 8 এরও সংযুক্ত কলামগুলি দেখান। অন্য উদাহরণস্বরূপ, যে কলামটি 1 মান দিয়ে শুরু হয়0111, যে কলাম 2 মান1774, যে কলাম 3 মান দিয়ে শুরু হয়0000000তাই, এবং। এটি কোনও ব্যক্তির জন্য মূল্যবোধগুলি দেখতে এবং কোনটি একই এবং কোনটি আলাদা see তা দেখতে খুব কঠিন করে তোলে। আমি কেবলমাত্র প্রয়োজনীয় ডেটা রেখে অপ্রয়োজনীয় সদৃশ অপসারণের চেষ্টা করেছি। দয়া করে যাচাই করুন যে আমি প্রশ্নের ক্ষতি করি নি।
স্কট

হাই gnometorule / টেরডন / স্কট- আপনার দ্রুত প্রতিক্রিয়া জন্য অনেক ধন্যবাদ। গতকাল আমি চেষ্টা এবং আশানুরূপ উত্তর পেয়েছিলাম .. নিচের উত্তর পেস্ট
Bharath

উত্তর:


0

আপনি যা সুনির্দিষ্টভাবে চান তা আমার কাছে অস্পষ্ট; তবে নীচের কোডটি আপনার মনে মনে আছে এমন লাইনের সাথে কিছু সম্বোধন করে। এটি সমস্ত মান সমষ্টি; এবং কেবল (প্রিন্ট) রেকর্ডগুলি রাখে যা 4, 5, 9 এবং 10 এর সমস্ত কলের ক্ষেত্রেই অনন্য which যার ক্ষেত্রে আমরা এই জাতীয় রেকর্ডটি প্রথম দেখি। কলগুলি 1, 2, 3, 9, 10, 6, 7, 8 মুদ্রিত হয় হতে পারে আপনি এটিকে যা চান তা সঠিকভাবে সামঞ্জস্য করতে পারেন বা আরও তথ্য সরবরাহ করতে পারেন। পি / ও অরসোর্টড; যদি আপনি এটি বাছাই করতে চান, বলুন, কর্নাল 1, কেবল আউটপুটটিকে সাজান। 

#!/usr/bin/awk - f
# or your system's location
BEGIN{
   FS=OFS="|";
   s6=s7=s8=0;
   t="";
   a[""]="";
   seen[""]=0;
}

{
   s6 += $6;
   s7 += $7;
   s8 += $8;

   t = $4 $5 $9 $10;
   seen[t]++;
   if (seen[t] == 1)
      a[t] = $1 "|" $2 "|" $3 "|" $9 "|" $10 "|" $6 "|" $7 "|" $8;
}

END{
   for (i in a)
      print a[i];
   print s6, s7, s8;
 }

0

আমি মাত্র UNK ব্যবহারের চেষ্টা করলাম এবং এটি কাজ করেছিল।

awk -F '|' '{কলাম 4 = ইউনিিক $ 4}; {coumn5 = uniq $ 5}; {coumn6 + = $ 6}; {কলাম 7 + = $ 7}; {কলাম 8 + = $ 8}; {কলাম 9 = ইউনিিক $ 9}; {coulmn10 = একক $ 10} END {মুদ্রণ কলাম 4 "|" কলাম 5 "|" কলাম 6 "|" কলাম 7 "|" কলাম 8 "|" কলাম 9 "|" column10} '

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