কোনও ফাইলের দ্বিতীয় কলামের উপর ভিত্তি করে ডেটা বাছাই করা


212

আমার কাছে দুটি কলামের ফাইল এবং nসারি সংখ্যা রয়েছে।

কলাম 1 namesএবং কলাম 2 রয়েছে age

আমি age(দ্বিতীয় কলামে) এর ভিত্তিতে আরোহণের ক্রমে এই ফাইলটির বিষয়বস্তু বাছাই করতে চাই ।

nameফলাফলটির সাথে কনিষ্ঠতম ব্যক্তির প্রদর্শন করা উচিত nameএবং তারপরে দ্বিতীয় কনিষ্ঠ ব্যক্তি এবং আরও অনেক কিছু ...

ওয়ান লাইনার শেল বা ব্যাশ স্ক্রিপ্টের জন্য কোনও পরামর্শ।


1
সুপারসেট: বিভেদক কাস্টম: stackoverflow.com/questions/1037365/...
সিরো Santilli郝海东冠状病六四事件法轮功

উত্তর:


329

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

sort -k2 -n yourfile

-n, --numeric-sortস্ট্রিং সংখ্যার মান অনুযায়ী তুলনা করুন

উদাহরণ স্বরূপ:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54

$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54

1
এও নোট করুন যে ব্যবহার -hপরিবর্তে -nমত সাজানোর মানুষের পাঠযোগ্য মান হবে 2Gবা 3Kসেইসাথে সংখ্যার পৃথক কমা যেমন1,234.5
chillitom

"ভুল" অর্ডার দিয়ে সমস্যার মুখোমুখি। মানুষকে মনোযোগ দিন "*** সতর্কতা *** পরিবেশের দ্বারা নির্দিষ্ট করা লোকেল সাজানোর ক্রমে প্রভাবিত করে LC_ALL=Cnative (স্ট্রিং ম্যাচ কেস ছাড়াই -n)
x'ES

এটি প্রথম কলামে শূন্যস্থান বিবেচনা করে না এবং দ্বিতীয়ের পরে আরও কলাম রয়েছে কিনা তা কাজ করে না, যেহেতু -k লাইন শেষ হওয়া অবধি পড়া হয়। মনে করুন এটি একটি টিএসভি ফাইল হিসাবে এর আরও ভাল সমাধান হ'লsort -t$'\t' -k2 -n FILE
tuxErrante

আপনাকে -t বিকল্পটি ব্যবহার করে আপনার ডিলিমিটারটি নির্দিষ্ট করতে হবে
স্পেকট্রাম

85

সমাধান:

sort -k 2 -n filename

আরও verbosely হিসাবে লেখা:

sort --key 2 --numeric-sort filename


উদাহরণ:

$ cat filename
A 12
B 48
C 3

$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

ব্যাখ্যা:

  • -কে # - এই যুক্তিটি প্রথম কলামটি নির্দিষ্ট করে যা সাজানোর জন্য ব্যবহৃত হবে। (নোট করুন যে এখানে কলামটি একটি সাদা স্পেস সীমিত ক্ষেত্র হিসাবে সংজ্ঞায়িত করা হয়েছে; আর্গুমেন্ট প্রতিটি লাইনের -k5পঞ্চম ক্ষেত্র দিয়ে শুরু হবে , প্রতিটি লাইনের পঞ্চম অক্ষর নয় )

  • -n - এই বিকল্পটি একটি "সংখ্যাসূচক সাজান" নির্দিষ্ট করে যার অর্থ পাঠ্যের পরিবর্তে কলামটি সংখ্যার সারি হিসাবে ব্যাখ্যা করা উচিত।


আরও:

অন্যান্য সাধারণ বিকল্পগুলির মধ্যে রয়েছে:

  • -r - এই বিকল্পটি বাছাইয়ের ক্রমটিকে বিপরীত করে। এটি - বিপরীত হিসাবেও লেখা যেতে পারে ।
  • -i - এই বিকল্পটি মুদ্রণযোগ্য অক্ষরগুলিকে উপেক্ষা করে। এটি --ignore-nonprinting হিসাবেও লেখা যেতে পারে ।
  • -b - এই বিকল্পটি নেতৃস্থানীয় ফাঁকা স্থানগুলিকে উপেক্ষা করে, যা সারণীর সংখ্যা নির্ধারণের জন্য সাদা স্পেস ব্যবহৃত হয় বলে সহজ। এটি --ignore- নেতৃস্থানীয় ফাঁকা হিসাবেও লেখা যেতে পারে ।
  • -f - এই বিকল্পটি অক্ষরের ক্ষেত্রে উপেক্ষা করে। "একটি" == "A"। এটি --ignore-কেস হিসাবেও লেখা যেতে পারে ।
  • -t [নতুন বিভাজক] - এই বিকল্পটি স্থান ব্যতীত অপারেটরটিকে প্রিপ্রোসেসিং ব্যবহার করে তোলে। এটি - ফিল্ড-বিভাজক হিসাবেও লেখা যেতে পারে ।

অন্যান্য বিকল্প রয়েছে, তবে এগুলি সর্বাধিক সাধারণ এবং সহায়ক, যা আমি প্রায়শই ব্যবহার করি।


@ অ্যাঞ্জেলো এই প্রশ্নের উত্তর সম্ভবত আপনি এই প্রশ্নের উত্তর গ্রহণ করার কয়েক বছর পরে পোস্ট করা হয়েছিল, কিন্তু আপনি কি এটি নতুন গৃহীত উত্তর হিসাবে বিবেচনা করেছেন?
জোনাথন ওয়াই।

অপশনটি -tছিল রিয়েল লাইফ সেভার !! যখন আপনার কলামগুলিতে স্পেস এবং কলামগুলি কোনও প্রদত্ত চরিত্রের মতো ,বা কোনও ট্যাব দ্বারা পৃথক হয়
একেএসএস

12

ট্যাব দ্বারা পৃথক মানগুলির জন্য নীচের কোডটি ব্যবহার করা যেতে পারে

sort -t$'\t' -k2 -n

-r অবতরণ ক্রমে ডেটা পাওয়ার জন্য ব্যবহার করা যেতে পারে।
সাংখ্যিক সাজানোর জন্য -n
, --key = POS1 [, POS2] যেখানে k ফাইলের কলামে
নীচে অবতরণ ক্রমের জন্য কোডটি রয়েছে

sort -t$'\t' -k2 -rn

4

ব্যবহার sort

sort ... -k 2,2 ...

8
আপনাকে বয়সগুলি অনুসারে বাছাই করতে -n ব্যবহার করতে হবে (সংখ্যাসমূহ অনুসারে)। অন্যথায় '11' '2' এর আগে আসবে।
ম্যাট রিয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.