কোন ক্ষেত্রের জন্য তার সংখ্যাসমূহের উপর ভিত্তি করে কোনও ফাইলকে কীভাবে বাছাই করবেন?


114

উদাহরণ file.txt:

  100 foo
  2 bar
  300 tuu

ব্যবহার sort -k 1,1 file.txtকরার সময়, লাইনগুলির ক্রম পরিবর্তন হবে না, যদিও আমরা আশা করি:

  2 bar
  100 foo
  300 tuu

পরম সংখ্যার মানের উপর ভিত্তি করে সংখ্যার সমন্বয়ে একটি ক্ষেত্রকে কীভাবে সাজানো যায়?

উত্তর:


149

সাজানোর জন্য ম্যান পৃষ্ঠাটিতে একটি উঁকি দেখুন ...

   -n, --numeric-sort
          compare according to string numerical value

সুতরাং এখানে একটি উদাহরণ ...

sort -n filename

1
আপনাকে সবাই ধন্যবাদ, ভাবেন! এটি তারযুক্ত, কারণ আমি এর ম্যান পৃষ্ঠাটি বেশ কয়েকবার পিছনে পিছনে দেখেছি এবং আমি এই বিকল্পটি দেখতে পাই নি। আহ, আমি একটি সরলীকৃত ম্যান পেজে ছিলাম। অভিশাপ!
lukmac

1
দয়া করে নোট করুন, ভাসমান পয়েন্টগুলির জন্য, ব্যবহার -g, --general-numeric-sortকরা আরও পরামর্শ দেওয়া হতে পারে। এটি আরও বৈজ্ঞানিক স্বরলিপি যেমন 1.234E10 ইত্যাদির অনুমতি দেয়
হার্পিস ফ্রি ইঞ্জিনিয়ার

103

আপনি যদি মিশ্র পাঠ্য এবং সংখ্যাসমৃদ্ধ স্ট্রিংগুলি বাছাই করছেন, উদাহরণস্বরূপ রোলিং লগের ফাইলের নামগুলি তবে এর সাথে বাছাই sort -nকরা প্রত্যাশার মতো কাজ করে না:

$ ls |sort -n
output.log.1
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.2
output.log.20
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9

-Vসেক্ষেত্রে বিকল্পটি কৌশলটি করে:

$ ls |sort -V
output.log.1
output.log.2
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.20

ম্যান পৃষ্ঠা থেকে:

   -V, --version-sort
          natural sort of (version) numbers within text

1
এটি আমাকে ছিটকে গেল, তাই আপনাকে ধন্যবাদ! কমপক্ষে আমার সাইগউইন-এ অন্য যে বিষয়টি আমাকে জড়িয়েছিল, তা হ'ল অক্ষরগুলি সরাতে এবং কেবল সংখ্যাগুলি রেখে বিকল্পগুলির lsমাধ্যমে পাইপিং করার সময়ও sedদৃশ্যত রঙিন আউটপুট জিনিসগুলিকে প্রভাবিত করেছিল। তাই দৌড়াদৌড়িও ls --color=neverএকটি পার্থক্য তৈরি করে।
ম্যাক্স স্টারকেনবুর্গ

দুর্দান্ত, -Vআমি ঠিক যা খুঁজছিলাম আমার প্রথমে ম্যান পেজগুলি দেখার অভ্যাস করা উচিত।
শ্রোলি

18

ভাল, এখানে অন্যান্য উত্তর উল্লেখ করুন

sort -n

তবে আমি নিশ্চিত নই যে এটি নেতিবাচক সংখ্যার জন্য কাজ করে। ফেডোরা 9-তে আমি সাজানো সংস্করণ 6.10 এর সাথে প্রাপ্ত ফলাফলগুলি এখানে দিচ্ছি।

ইনপুট ফাইল:

-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125

আউটপুট:

-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625

যা সম্ভবত সংখ্যার মান দ্বারা অর্ডার করা হয় না।

তারপরে, আমি অনুমান করি যে আরও সুনির্দিষ্ট উত্তরটি ব্যবহার করা হবে sort -nতবে কেবলমাত্র সমস্ত মান ধনাত্মক হয়।

PS: sort -gউদাহরণস্বরূপ একই ফলাফলগুলি ব্যবহার করে

সম্পাদনা:

লোকাল সেটিংস দেখে মনে হচ্ছে বিয়োগ চিহ্নটি অর্ডারকে কীভাবে প্রভাবিত করে ( এখানে দেখুন )) যথাযথ ফলাফল পেতে আমি সবেমাত্র করেছি:

LC_ALL=C sort -n filename.txt



1

আপনাকে অবশ্যই নিম্নলিখিত কমান্ডটি করতে হবে:

sort -n -k1 filename

যা করা উচিৎ :)


-1

ক্রম -Nr অবতরণ ক্রমে বাছাইয়ের জন্য ব্যবহার করুন। পড়ুন

সাজান

আরও রেফারেন্সের জন্য উপরের ম্যান পৃষ্ঠাটি দেখুন


-4
    echo " Enter any values to sorting: "
read n
i=0;
t=0;
echo " Enter the n value: "
for(( i=0;i<n;i++ ))
do
read s[$i]
done
for(( i=0;i<n;i++ ))
do
for(( j=i+1;j<n;j++ ))
do
if [ ${s[$i]} -gt ${s[$j]} ]
then
t=${s[$i]}
s[$i]=${s[$j]}
s[$j]=$t
fi
done
done
for(( i=0;i<n;i++ ))
do
echo " ${s[$i]}  "
done

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