3 টি কলাম অনুসারে কীভাবে বিশ্রী বাছাই করা যায়


90

আমার মত একটি ফাইল (user.csv) আছে

ip,hostname,user,group,encryption,aduser,adattr

ব্যবহারকারীর দ্বারা সমস্ত কলাম সাজানোর প্রিন্ট করতে চান,

আমি চেষ্টা করেছিলাম awk -F ":" '{print|"$3 sort -n"}' user.csv, এটি কাজ করে না।


11
sort -t, -k3 file
কেভিন

উত্তর:


174

কিভাবে ঠিক sort

sort -t, -nk3 user.csv

কোথায়

  • -t,- আপনার বিভেদক সংজ্ঞায়িত ,

  • -n- আপনাকে সাংখ্যিক বাছাই করে। আপনি আপনার প্রয়াসে এটি যুক্ত করার পরে যুক্ত হয়েছেন। যদি আপনার ব্যবহারকারীর ক্ষেত্রটি কেবলমাত্র পাঠ্য হয় তবে আপনার এটির দরকার নেই।

  • -k3- ক্ষেত্রটি (কী) সংজ্ঞায়িত করে। ব্যবহারকারী তৃতীয় ক্ষেত্র।


4
আমি বাছাই 2 কলাম কীভাবে ব্যবহার করতে পারি? উদাহরণস্বরূপ, আমি প্রথমে column কলাম অনুসারে বাছাই করতে চাই এবং কলাম 3 সেকেন্ড অনুসারে বাছাই করতে চাই।
ব্যবহারকারী2452340

4
সিএসভিতে কমাযুক্ত স্ট্রিং থাকলে (যদি আপনি যে কলামটি বাছাই করতে চান তা কমা-সম্বলিত কলামের চেয়ে পূর্বে না হলে) এটি কাজ করবে না। আপনাকে প্রথমে জোর করে পাস করতে হবে (FPAT = "[^,] * | \" [^ \ "] * \" "এবং OFS =" | "বা অন্য কোনও ডিলিমিটার যা আপনি বাছাইয়ের সাথে ব্যবহার করতে পারেন)
ডেভেমিরন

4
@ user2452340 আপনি এটি করতে পারেন: sort -t, -nk3 filename.csv | sort -t, -nk6- প্রথমে এটি 3 টি কলাম অনুসারে বাছাই করবে, তারপরে এটি 6 টি কলাম অনুসারে বাছাই করবে যাতে কলাম 6 পুরোভাবে সঠিকভাবে সাজানো হয় এবং যে কোনও সারি যেখানে column কলাম একই, সেগুলি কলাম 3 অনুসারে বাছাই করা হবে ।
ম্যাথু

4
@ ম্যাথেজ sort -t ',' -k3,3n -k6,6nআরও ভাল হবে। -k33 কলাম এবং বাকী রেখাটি ব্যবহার করবে।
কুসালানন্দ

4
আমার মাত্র 2 টি কলামের ফাইলটি কমা দ্বারা বিভক্ত করার জন্য আমার দরকার ছিল, জয়পালকে ধন্যবাদ
রিকার্ডো রিভেরা

20
  1. ব্যবহারকারীর আইডি সামনে রাখার জন্য বিশ্রী ব্যবহার করুন।
  2. সাজান
  3. সদৃশ ব্যবহারকারীর আইডি অপসারণ করতে সেড ব্যবহার করুন, ধরে নেবেন যে ব্যবহারকারী আইডিগুলিতে কোনও স্থান নেই।

    awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
    

এটি খুব দরকারী, বিশেষত যদি আপনাকে কোনও সাজানোর ক্ষেত্র যুক্ত করতে কলামগুলি পার্স করতে বা সংহত করতে হয় তবে কেবলমাত্র মূল লাইনটি ধরে রাখুন। আমি সাজানোর জন্য তারিখ এবং সময় ক্ষেত্রগুলিকে পার্স / সংযুক্ত করতে বিশদ / বিভক্ত ব্যবহার করেছি, তারপরে সরান।
স্কাইটেকার

4
sortকোনও নির্দিষ্ট কলাম অনুসারে কীভাবে বাছাই করা যায় তা ইতিমধ্যে জানে, তবে শোয়ার্টজিয়ান ট্রান্সফর্ম হিসাবে পরিচিত এই কৌশলটি দরকারী যখন আপনি যে ক্ষেত্রটি বাছাই করতে চান তা তুচ্ছভাবে একটি সংজ্ঞায়িত কলাম নয়।
ট্রিপলি

10

আপনি একটি ডিলিমিটার চয়ন করতে পারেন, এই ক্ষেত্রে আমি একটি কোলন বেছে নিয়েছি এবং প্রথম কলামটি মুদ্রিত করেছি, বর্ণানুক্রমিক ক্রম অনুসারে বাছাই:

awk -F\: '{print $1|"sort -u"}' /etc/passwd

9
awk -F, '{ print $3, $0 }' user.csv | sort -nk2 

এবং বিপরীত অর্ডার জন্য

awk -F, '{ print $3, $0 }' user.csv | sort -nrk2 



0

বাছাই থেকে প্রথম লাইন (শিরোলেখ) বাদ দিতে, আমি এটিকে দুটি বাফারে বিভক্ত করেছি।

df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.