ইউনিক্সের সাহায্যে কমা-বিস্মৃত ফাইলে সংখ্যায় বাছাই করা


8

আমার কাছে কমা-বিভাজিত ফাইল পাওয়া গেছে যা দেখতে দেখতে:

100,00869184
6492,8361
1234,31
200,04071

আমি sortএই ফাইলটি কেবল প্রথম কলাম দ্বারা সংখ্যাগতভাবে বাছাই করতে চাই ।

কাঙ্ক্ষিত ফলাফল:

100,00869184
200,04071
1234,31
6492,8361

আমি বাছাই করে কীভাবে এটি অর্জন করব? দেখে মনে হচ্ছে কমাগুলি ডিলিমিটারের পরিবর্তে হাজার হাজার বিভাজকের মতো আচরণ করা হচ্ছে এমনকি আমি যখন তাদেরকে ডেকেছি।

উভয় sort -t',' -nএবং sort -t',' -nk1'এই আমাকে দিন:

1234,31
200,04071
6492,8361
100,00869184

ডিফল্ট অনুসারে বাছাই করা (কোনও পরামিতি নেই) বা ব্যবহার করে sort -t','এটি আমাকে দেয়:

100,00869184
1234,31
200,04071
6492,8361

এবং একটি সংখ্যা হিসাবে বাছাই sort -nআমাকে এটি দেয়:

1234,31
200,04071
6492,8361
100,00869184

আমি কীভাবে আমার পছন্দসই ফলাফলটি অর্জন করতে ব্যবহার করতে পারি?

যোগ করার জন্য সম্পাদিত: এটি প্রায় এক মিলিয়ন লাইনের একটি বাছাই করা তালিকা তৈরির জন্য এককালীন ক্রিয়াকলাপের জন্য, সুতরাং ওয়ার্কআরউন্ডস বা অন্যান্য অপ্রচলিত পদ্ধতি পুরোপুরি গ্রহণযোগ্য।


উদাহরণগুলি আমি এখানে দেখছি বলে মনে হচ্ছে -tবিকল্পটি -tচরিত্রের মধ্যে স্থান রয়েছে বলে মনে হচ্ছে
SeanC

প্রথম চিন্তা - ব্যবহার কাটা। প্রদত্ত বিভাজকের ভিত্তিতে এটি কেবলমাত্র একটি নির্দিষ্ট কলাম নির্বাচন করে। এছাড়াও "আর্টেম আইস" এর টিআর সহ উত্তর। আমি tr পছন্দ করি। যদিও এটি লিখতে এবং পরীক্ষা করতে আমি খুব অলস। চিয়ার্স!
ভোরাক

সম্ভাব্য ট্যাব গৃহস্থালির কাজ জন্য একই: stackoverflow.com/questions/1037365/...
সিরো Santilli冠状病毒审查六四事件法轮功

উত্তর:


9

এটি অবশ্যই একটি নোংরা কাজ, তবে আমি লোকাল সম্পর্কে @ স্লাহ্কের টিপকে ধন্যবাদ জানাতে একটি উপায় খুঁজে পেয়েছি। যদি এর থেকে আরও ভাল উত্তর আসে তবে তা অন্যের পক্ষে আরও সহায়ক হয়, আমি অবশ্যই এটি গ্রহণ করব কারণ এটি কেবলমাত্র আমার নির্দিষ্ট সমস্যার জন্য কাজ করে।

আমি লোকালটি স্প্যানিশ (বলিভিয়ান) এ সেট করেছিলাম যাতে কমাগুলি দশমিক পয়েন্টের মতো বিবেচিত হয়, তারপরে স্ট্যান্ডার্ড সংখ্যার বাছাইয়ের কৌশলটি কার্যকর হয়েছিল।

$ export LC_NUMERIC="es_BO.utf8"

$ cat test.csv
100,00869184
6492,8361
1234,31
200,04071

$ sort -n test.csv
100,00869184
200,04071
1234,31
6492,8361

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

@ এসএলএইচএইচকে ইউনিক্সে আটকে থাকা বেশিরভাগ সমস্যার চূড়ান্ত বলে মনে হচ্ছে :) নির্বিশেষে আমাকে সমাধানে সহায়তা করার জন্য আপনার সহায়তার জন্য ধন্যবাদ।
ডিপ্যাচারি

6

জিএনইউ sortডিফল্টরূপে এটি করে:

$ cat test
100,00869184
6492,8361
1234,31
200,04071

$ gsort -nt',' < test
100,00869184
200,04071
1234,31
6492,8361

সংস্করণ:

$ gsort --version
sort (GNU coreutils) 8.19

যদিও একটি সতর্কতা রয়েছে: যদি আপনার বাছাই করা প্রত্যাশা অনুযায়ী কাজ না করে, তবে localeসম্ভবত আপনার চেয়ে আলাদা কিছুতে সেট করা আছেC । কেন? localeঅক্ষর, সংখ্যা, দশমিক অক্ষর এবং সিটিএর বাছাই এবং ব্যাখ্যা ব্যাখ্যা করে।

এটি পরীক্ষা করতে, কেবলমাত্র localeএকটি টার্মিনালে প্রবেশ করুন । হয় LC_NUMERICসেট en_US.UTF-8, হয়তো? এটি ভুল ক্রম ক্রম ব্যাখ্যা করবে। এটিকে আবার সেট করুন C:

export LC_NUMERIC=C

তারপরে, আপনার sortআদেশটি আবার চেষ্টা করুন । আপনি আপনার বিশ্বব্যাপী সেট করতে চান তাহলে localeকরতে C, সঙ্গে এই কাজ:

export LC_ALL=C

আমার পরিবেশে জিএনইউতে আমার অ্যাক্সেস নেই। এটি শেষ হয়ে গেলে আমি সহজেই সরিয়ে ফেলতে পারি এমন কি এটি? আড্ডায় এইচএমইউ যদি কেউ আমাকে এটি করতে সহায়তা করতে চায় ... আমি বেশ ইউনিক্স নবাগত।
ডিপ্যাচারি

আমি নিশ্চিত যে এটি কেবল একটি localeসমস্যা। তবে আসলে আপনার sort --versionজন্য কী ?

সাজান - রূপান্তর আমাকে একটি অবৈধ যুক্তি দেয়। --কমান্ডগুলি অতীতে আমার পক্ষে কাজ করে নি। আমি ম্যান পৃষ্ঠাটি পরীক্ষা করে দেখেছি এবং স্পষ্টভাবে কোনও সংস্করণ বলা হয়নি, তবে এটি "এইচপি-ইউএক্স 11 আই সংস্করণ 2: আগস্ট 2003" তালিকাভুক্ত করে যদি এটি কিছুটা সহায়তা করে। আমার LC_NUMERIC "সি" তে সেট করা আছে।
ডিপ্যাচারি

উদাহরণস্বরূপ জার্মান স্থানীয় অবস্থান ,একটি দশমিক বিভাজক হিসাবে ব্যবহার করবে । যদিও আমি কখনও এইচপি-ইউএক্স ব্যবহার করি নি।

1

-gঅনুমান করা যায় যে বিকল্পটি সংখ্যার বাছাইয়ের জন্য যুক্ত করার চেষ্টা করুন ।

চেষ্টা করুন:

sort -t',' -g <whatever>

-nসংখ্যা বাছাই করা হয় না ? -g আমাকে একটি অবৈধ বিকল্প দেয়।
ডিপ্যাচারি

-gহয় general-numeric-sortবিকল্প এবং আসলে কোন সাম্প্রতিক সংস্করণে উপলব্ধ হওয়া উচিত sort। @ ডিপ্যাচারি

এই কাজের আমার জায়গায় তাই আমি প্রায় স্পষ্টভাবে একটি সাম্প্রতিক সংস্করণ :) না
dpatchery

0

ডিলিমিটারটি প্রতিস্থাপন করুন:

cat commafile | tr , " " | sort -n 

- আপনাকে সাহায্য করা উচিত।

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