ইউনিক্স বাছাইয়ের মাধ্যমে একাধিক কী বাছাই করা হচ্ছে


137

আমার কাছে সম্ভাব্য বড় ফাইল রয়েছে যেগুলি 1-এন কী দ্বারা বাছাই করা দরকার। এর মধ্যে কয়েকটি কী সংখ্যাসূচক হতে পারে এবং এর কিছু নাও থাকতে পারে। এটি একটি স্থির-প্রস্থের কলামার ফাইল তাই কোনও ডিলিমিটার নেই।

ইউনিক্স বাছাই করে এটি করার কোনও ভাল উপায় আছে কি? একটি কী দিয়ে এটি '-n' ব্যবহার করার মতোই সহজ। আমি ম্যান পৃষ্ঠাটি পড়েছি এবং সংক্ষিপ্তভাবে গুগল অনুসন্ধান করেছি, তবে এর থেকে ভাল উদাহরণ পাই নি। আমি কীভাবে এটি সম্পাদন করতে যাব?

দ্রষ্টব্য: ফাইলের আকারের সম্ভাবনার কারণে আমি পার্লকে প্রত্যাখ্যান করেছি। এটি একটি শেষ অবলম্বন হবে।


উদাহরণ কমান্ড লাইন তৈরি করতে উদাহরণের এক বা দুটি লাইন সত্যই সহায়ক হবে। এছাড়াও, "1-n" কীগুলির অর্থ কি আপনার চলক সংখ্যক কী দ্বারা বাছাই করতে হবে? স্ক্রিপ্টিং ছাড়া এটি করা মজাদার ...
কেন জেন্টল

1-n বৈশিষ্ট্যটি সক্ষম করতে আমার কাছে বাছাই করা কমান্ডের চারপাশে পিএইচপি র‌্যাপার রয়েছে।
ক্রিস ক্লোবারডানজ

উত্তর:


69

-kবিকল্পটি (বা --key=POS1[,POS2]) ব্যবহার করুন । এটি একাধিকবার প্রদর্শিত হতে পারে এবং প্রতিটি কীতে বৈশ্বিক বিকল্প থাকতে পারে (যেমন nসংখ্যার বাছাইয়ের জন্য)


7
সাজানোর ম্যান পৃষ্ঠা থেকে: "POS হল এফ [ সম্পূর্ণ ডকুমেন্টেশনের জন্য ম্যান পৃষ্ঠা দেখুন।
অ্যাডাম রোজেনফিল্ড

49
আপনি পাগল হতে না চাইলে আন্ডারসের উত্তরও দেখুন।
ron

1
উপরের উভয় মন্তব্যই সঠিক এবং সংযোজক। ধন্যবাদ, ভদ্রলোক।
কেন সৌম্য

314

যত্ন নিন যদিও:

আপনি যদি ফাইলটি প্রাথমিকভাবে ক্ষেত্র 3 দ্বারা বাছাই করতে চান এবং দ্বিতীয়ত ক্ষেত্র 2 দ্বারা আপনি এটি চান:

sort -k 3,3 -k 2,2 < inputfile

এটি নয়: sort -k 3 -k 2 < inputfile যা ক্ষেত্রের 3 থেকে শুরু করে লাইনের শেষ পর্যন্ত স্ট্রিং দ্বারা ফাইলটি সাজায় (এটি সম্ভাব্য অনন্য)।

-k, --key=POS1[,POS2]     start a key at POS1 (origin 1), end it at POS2
                          (default end of line)

8
জীবন বদলাচ্ছে। ধন্যবাদ।
ডেভিডটবার্নাল

2
উপস! এখন আমাকে একটি স্ক্রিপ্ট ঠিক করতে হবে কারণ এর আগে আমি কেবল উপরের প্রথম উত্তরটি দেখেছি ... ভাল জিনিসটি আমি এখনও স্ক্রিপ্ট আউটপুটে নির্ভর করি না ....
ওয়াইল্ডকার্ড

নিস! এখন, আমি কী চাই যদি 3 নম্বরটি সংখ্যাগত এবং বিপরীতভাবে বাছাই করা হয় যেখানে 2 ক্ষেত্রটি অ-সংখ্যাসূচক এবং স্বাভাবিক (আরোহণ) অনুসারে বাছাই করা যায়? :)
অরুণ

2
@ অরন পোস ম্যান পৃষ্ঠার শেষে ব্যাখ্যা করা হয়েছে। আপনি কেবল ক্ষেত্রের সংখ্যায় অর্ডারিং বিকল্পগুলি এই জাতীয় সংযোজন করুন:sort -k 3,3nr -k 2,2
Andras

1
Aargh। কী পাল্টা ইন্টারফেস: এটি -k2হওয়া উচিত -k2,2এবং একটি পিছনের কমাটি -k2,হওয়া উচিত 'লাইনের যাদুকর ডিফল্ট শেষ বা যাই হোক না কেন'।
android.weasel

94

-K বিকল্পটি যা আপনি চান তা।

-k 1.4,1.5n -k 1.14,1.15n

প্রথম ক্ষেত্রের 4-5 অক্ষরের অবস্থানগুলি ব্যবহার করা হবে (এটি নির্দিষ্ট প্রস্থের জন্য সমস্ত ক্ষেত্র) এবং প্রথম কী হিসাবে সংখ্যাগতভাবে বাছাই করা।

দ্বিতীয় কীটি প্রথম ক্ষেত্রের মধ্যে 14-15 অক্ষর হবে।

(সম্পাদনা)

উদাহরণ (আমার যা কিছু আছে তা হ'ল ডস / সাইগউইন হ্যান্ডি):

dir | \cygwin\bin\sort.exe -k 1.4,1.5n -k 1.40,1.60r

তথ্য জন্য:

12/10/2008  01:10 PM         1,564,990 outfile.txt

মাসিক সংখ্যার (4-5 পোস্টের) সংখ্যা অনুসারে ডিরেক্টরি তালিকা এবং তারপরে বিপরীতে ফাইলের নাম (পোজ 40-60) অনুসারে বাছাই করে। যেহেতু কোনও ট্যাব নেই তাই এটি বাছাই করার জন্য সমস্ত ক্ষেত্র 1।


ইনপুট ডেটাতে কোনও ফাঁকা জায়গা না থাকলে এটি কেবলমাত্র একটি ক্ষেত্র। তবুও, আপনার উদাহরণ দরকারী।
জোনাথন লেফলার

সংশোধন: ইনপুট ডেটাতে কোনও ট্যাব / নেই থাকলে। ডসের 'ডির' কমান্ড আউটপুটে কোনও ট্যাব নেই।
ক্লিনটন পিয়ার্স

বিকল্পগুলি কীভাবে ব্যবহার করবেন (উদাহরণস্বরূপ, বিপরীত) উদাহরণগুলি অত্যন্ত সহায়ক, কারণ কেবল ম্যান পৃষ্ঠা থেকে কীভাবে ব্যবহার করা যায় তা খুঁজে পাওয়া প্রায় অসম্ভব এবং অন্যান্য উত্তরগুলিতে এটি উল্লেখ করা হয়নি। আমি আশা করি আমি এটির জন্য +2 করতে পারতাম। ;)
এমএসবি

22

সংখ্যাসূচক ও অভিধানের ক্রমানুসারে, সিএসভি ফাইলে বিভিন্ন কলামগুলি সাজানোর জন্য এখানে একটি কলাম 5 এবং পরে অভিধান ক্রম হিসাবে রয়েছে

~/test>sort -t, -k1,1n -k2,2n -k3,3d -k4,4n -k5d  sort.csv
1,10,b,22,Ga
2,2,b,20,F
2,2,b,22,Ga
2,2,c,19,Ga
2,2,c,19,Gb,hi
2,2,c,19,Gb,hj
2,3,a,9,C

~/test>cat sort.csv
2,3,a,9,C
2,2,b,20,F
2,2,c,19,Gb,hj
2,2,c,19,Gb,hi
2,2,c,19,Ga
2,2,b,22,Ga
1,10,b,22,Ga

নোট করুন -k1,1n এর অর্থ সংখ্যাটি 1 কলাম থেকে শুরু হবে এবং 1 কলামে শেষ হবে যদি আমি নীচে এটি করতাম তবে এটি 1 এবং 2 সংলগ্ন কলামটি 1,110 কে 110 অনুসারে বাছাই করা হত

~/test>sort -t, -k1,2n -k3,3 -k4,4n -k5d  sort.csv
2,2,b,20,F
2,2,b,22,Ga
2,2,c,19,Ga
2,2,c,19,Gb,hi
2,2,c,19,Gb,hj
2,3,a,9,C
1,10,b,22,Ga

1
এটি সেরা উত্তর কারণ এটি দেখায় যে কীভাবে বিভিন্ন কলামের জন্য আলাদা আলাদা স্যুইচ ব্যবহার করা যায়
xaxa

12

আমি আপনার ক্ষেত্রে কিছু বিশ্বাস করি

sort -t@ -k1.1,1.4 -k1.5,1.7 ... <inputfile

আরও ভাল কাজ করবে। @ হল ক্ষেত্র বিভাজক, নিশ্চিত হয়ে নিন যে এটি এমন কোনও চরিত্র যা কোথাও উপস্থিত নেই। তারপরে আপনার ইনপুটটিকে একটি কলাম সমন্বিত হিসাবে বিবেচনা করা হবে।

সম্পাদনা: আপাতদৃষ্টিতে ক্লিন্টপ ইতিমধ্যে একটি অনুরূপ উত্তর দিয়েছে, দুঃখিত। তিনি উল্লেখ করেছেন যে, পতাকাগুলি 'এন' এবং 'আর' প্রতিটি-কে .... বিকল্পে যুক্ত করা যেতে পারে।


যদিও gnu.org/software/coreutils/manual/html_node/… ডক্সের সাথে ডিফল্ট পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক স্থানটি যদিও কখনও কখনও ক্ষেত্রের গণনা আপনি প্রত্যাশা করেন না তবে তা হয় না। এলসি_সিটিওয়াইপি লোকেল সেটিংয়ের কারণে অন্যরা যেমন এখানে বলেছে সম্ভবত। সন্দেহের মধ্যে কখন গণনার রেখা শুরু!
ব্র্যাড ড্রে

5

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


2

আমি কেবল কয়েকটি টিপস যুক্ত করতে চাই, যখন আপনি বাছাইয়ের সময় ব্যবহার করেন, আপনার লোকেল সম্পর্কে সতর্ক থাকুন যা কী তুলনার ক্রমকে প্রভাবিত করে। আমি যা চাই তা স্পষ্টভাবে LC_ALL = C ব্যবহার করি loc


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