কম: ফাইল সাজানো ক্রমে নয়


9

আমি commদু'টি সাজানো ফাইলের তুলনা করতাম । এই ফাইলগুলির প্রতিটি লাইন ধনাত্মক পূর্ণসংখ্যার সংখ্যা। তবে ফলাফলগুলি দেখায়

comm: file 1 is not in sorted order
comm: file 2 is not in sorted order

এই দুটি ফাইল বাছাই করা হলেও ত্রুটি কিভাবে আসবে?


আমার ক্ষেত্রে আমি নোটপ্যাড ++ ব্যবহার করে ফাইলগুলি বাছাই করেছি (লিক্সিকোগ্রাফিক আরোহণ), যা ছোট ছোট অক্ষর এবং মূলধরণের কেস লেটারগুলি পৃথক উদাহরণ হিসাবে বিবেচনা করে। একটি 'জেড' এর পরে আরোহী বাছাইয়ের পরে উপস্থিত হবে। এটি কীভাবে সাজান ইউটিলিটি (বাশ) সাজায় তার থেকে আলাদা। এটি যাচাই করতে আমি সমস্ত লাইনগুলিকে আপার কেসে রূপান্তরিত করেছি, এবং তারপরে এনপি ++ এ সাজানো হয়েছে, কম আর অভিযোগ করা হবে না।
সাহিল সিং

উত্তর:


10

commলেক্সিকোগ্রাফিক সাজানোর (প্লেইন sort) প্রয়োজন, সংখ্যার সাজানোর ( sort -n) নয়। উদাহরণস্বরূপ, এটি নিম্নলিখিত আদেশটি চায়:

1
2000
300

নিম্নলিখিত আদেশ নয়:

1
300
2000

এটি সংশোধন করুন এবং সমস্যাটি দূরে যাওয়া উচিত। আরো গূঢ় ক্ষেত্রে যেখানে জন্য commএর লোকেল থেকে আলাদা হতে পারে sortলোকেল, আপনি চালাতে চান পারে sortএবং commসঙ্গে LC_COLLATE=Cতাদের পরিবেশের দেশীয় বাইট ক্রম ব্যবহার করতে।


কীভাবে এটি সংখ্যার বাছাই করতে?
wenzi


" Lexographic ক্রমানুসার " যেখানে একটি ধারাবাহিক সংখ্যাগুলির বৃদ্ধি একটি আদেশ seeries- আপনি এটা আপনার উত্তর পিছন পেয়েছেন মধ্যে: mathworld.wolfram.com/LexicographicOrder.html । আমার নিচে উত্তর এর পরীক্ষার ফলাফল যা ব্যবহার তুলনা পড়ুন দয়া করে sort সঙ্গে , এবং ছাড়া-n সুইচ এবং শুধুমাত্র প্রমান দিয়ে-n সুইচ আপনি অর্জন করতে পারেন সঠিক বৃদ্ধি অর্ডার আপনি স্বীকার করেন আপনার নিজের উত্তর প্রয়োজন।
F1Linux

@ F1Linux কি? commআক্ষরিক LC_COLLATEডি অর্ডার প্রয়োজন । আপনার উত্তরের ত্রুটিগুলি আপনার পরীক্ষার সেটের বাইরের উদাহরণগুলির জন্য নিখুঁতভাবে প্রসাধনী নয় ... এটির জন্য যথেষ্ট বলুন না কেউ ইতিবাচক সংখ্যার জন্য বাছাইয়ের জন্য বলেন নি।
ক্রিস ডাউন

@ ক্রিসডাউন আপনার উত্তর যা আমি প্রতিক্রিয়া জানিয়েছিলাম - আমি সবেমাত্র সম্পাদনা করেছি এবং এখনই " এলসি_কোলেট " উল্লেখ করেছেন : "কম লিটারাল্লেক্সিকোগ্রাফিক সাজ চান, সংখ্যার সাজানোর নয়। এটি সংশোধন করুন এবং সমস্যাটি চলে যাওয়া উচিত। " এখন কোথায় "এলসি_কোলোলেট" সম্পর্কে এমন কিছু ছিল যা "_এলেক্সোগ্রাফিক" বাছাইয়ের চেয়ে খুব আলাদা জন্তু। প্রকৃতপক্ষে, আপনার প্রাথমিক উত্তরটি কেবলমাত্র কোনও উদাহরণের সাথে একক লাইনে এত কম ছিল যে আমাকে নিজের উত্তর দিয়ে প্রশ্নটি পুনরায় দেখাতে উত্সাহিত করেছিল। আমি আপনার আপডেট হওয়া উত্তরটিকে সমর্থন করছি কারণ আপনি উল্লেখ করেছেন যে "LC_COLLATE" অবশ্যই এখানে অপারেটিভ।
F1Linux

0

আপডেট উত্তর:

সমস্যাঃ

ওপি একটি ত্রুটি বার্তা গ্রহন করেন সম্বন্ধে " ফাইল সাজানো ক্রম নয় যখন ব্যবহার" commতুলনা করতে ধনাত্মক পূর্ণসংখ্যা ফাইল, না পাঠে। সুতরাং আমরা দশমিক নয় সংখ্যা নিয়ে কাজ করছি।

সংক্ষিপ্ত উত্তর:

সরবরাহিত ফলাফলগুলি বাছাই করতে ব্যবহৃত কমান্ডের -nসাথে স্যুইচ ব্যবহারের উপর নির্ভর করে প্রাপ্ত sortফলাফলের commক্রমটি commভিন্ন হতে পারে:

লেক্সোগ্রাফিক : -nবাছাইয়ের সাথে স্যুইচটি ব্যবহারের ফলে "ধনাত্মক পূর্ণসংখ্যার" ক্রমবর্ধমান সংখ্যার ক্রম অনুসারে অর্ডার হবে। Errorcomm এর সুইচ ব্যবহার করে " ত্রুটি " দমন করা যায়--nocheck-order

বাইট অর্ডার : এর সাথে কোনও ব্যবহার নেই । আদেশটি নির্ধারণ করে যা কমান্ডটি কার্যকর করা হয় সেখানে হোস্টে সেট করা কীভাবে পৃথক হতে পারে । এটি ইনপুটটি ডিফল্টরূপে প্রত্যাশা করে। এখানে আরও কিছু পাওয়া যাবে: রেফারেন্স 1 এবং রেফারেন্স 2-n switchsortLC_COLLATElocalecommLC_COLLATE

ত্রুটিটি কি সমস্যা? এটি আপনি অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে। আপনি উদাহরণ নীচে দেখতে পাবেন যে,commফাইল তুলনা পর একই ফলাফল ফেরৎ দিয়ে বা ছাড়া sort `গুলি-n, সুইচ যদিও তাদের ক্রম কিনা তার উপর নির্ভর করে উপরে ভাবে পরিবর্তিত হতে হবে-n switchসঙ্গে ব্যবহার করা হয়sortকমান্ড। নিজেই, আমি "লেক্সোগ্রাফিক" অর্ডার করা ফলাফলগুলি পছন্দ করি - সংখ্যায় যা ক্রমবর্ধমান।

তবে আপনি যদি " লেক্সোগ্রাফিক " ক্রমে ফলাফলগুলি না চান তবে তুলনার জন্য সরবরাহ করা ডেটা বাছাই করার সময় স্যুইচটি ব্যবহার করবেন না-ncomm

পরীক্ষামূলক:

আমরা commকমান্ডের ফলাফলগুলি সুইচটির সাথে এবং বাইরে তুলনা করব -n। আমি কুসালানন্দের অনুরোধ অনুযায়ী আমার নমুনা পরীক্ষার ডেটা সেটের জটিলতা বাড়িয়েছি:

পরীক্ষার ডেটা :

file1.txt :

40
110000
2200
6
33000

file2.txt :

2200
40
33000
6
440000

ছেদ :

দুটি ফাইলের মধ্যে সাধারণ সংখ্যার তালিকা করুন

-nসুইচ ছাড়াই :

comm -12 <(sort file1.txt) <(sort file2.txt)

2200
33000
40
6

ফলাফল : সঠিক, তবে একটি জাতিসংঘবদ্ধ অর্ডারে ফিরে এসেছে

সঙ্গে -n স্যুইচ করুন:

comm -12 <(sort -n file1.txt) <(sort -n file2.txt)

6
40
2200
33000
comm: file 1 is not in sorted order

ফলাফল : সঠিক, তবে একটি লেক্সোগ্রাফিকের সাজানো ক্রমে ফিরে এসেছে । অপারেশনটি সাফল্যের সাথে শেষ হয়েছে এবং স্যুইচ commছাড়াই ব্যবহারের মতো একই ফলাফল ফিরে -nপেয়েছে তবে সাজানো তালিকায় রয়েছে।

পার্থক্য :

প্রতিটি ফাইলের জন্য কেবল অনন্য সংখ্যার তালিকা করুন:

-nসুইচ ছাড়াই :

comm -3 <(sort file1.txt) <(sort file2.txt)

110000
         440000

ফলাফল : সঠিক- এই সংখ্যাগুলি প্রতিটি সম্পর্কিত ফাইলের জন্যই একচেটিয়া।

সঙ্গে -n স্যুইচ করুন:

comm -3 <(sort -n file1.txt) <(sort -n file2.txt)

110000
comm: file 1 is not in sorted order
         440000

ফলাফল : সঠিক, স্যুইচ commছাড়াই একই ফলাফল -n, কিন্তু ফাইলগুলিতে নিজেরাই বাছাই না হওয়া ইতিবাচক পূর্ণসংখ্যার ক্রম সম্পর্কে ত্রুটি প্রদান করে।

লেক্সোগ্রাফিক ফলাফলের সমাধান:

ত্রুটি বার্তাটি দমন করতে switch commগুলি ব্যবহার করুন --nocheck-order। যেহেতু আমরা জানি যে প্রতিটি ফাইলগুলিতে নম্বরগুলি বাছাই করা হয় না তবে ফলাফলগুলি comm -nসঠিক হয় ত্রুটিটিকে দমন করে নিরাপদে উপেক্ষা করা যেতে পারে:

ছেদ :

comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)

6
40
2200
33000

পার্থক্য :

comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)

110000
         440000

উপসংহার:

"ত্রুটিটি ফাইলটি সাজানো ক্রমে নেই " যখন ফেরত দেওয়া ধনাত্মক পূর্ণসংখ্যগুলি বাছাই করারcomm অর্থ এই নয় যে এর -nসাথে স্যুইচ ব্যবহার করে প্রাপ্ত ফলাফলগুলি commভুল। প্রকৃতপক্ষে, comm -nসাজানো ক্রমে একটি পরিপাটি সঠিক রিটার্ন ব্যবহার করে !

@ ধাগকে ধন্যবাদ, @ কুসালানন্দ @ ক্রিসডাউন এই বিষয়গুলি উত্থাপনের জন্য যা আরও প্রসারণ প্রয়োজন। আমার কাজ পর্যালোচনা করে সর্বদা খুশি: আমরা যদি আমাদের সহকর্মীদের দ্বারা ক্রমাগত ধাক্কা ও চ্যালেঞ্জ জানাই তবে কেবলমাত্র আমরা আরও ভাল can


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

আবার এমন সংখ্যার সাথে পরীক্ষা করুন যা 1000, 200, 30, 4 এর মতো পৃথক সংখ্যাসূচক এবং শব্দকোষ অনুসারে বাছাই করে
কুসালানন্দ

@ কুসালানন্দ সবেমাত্র আমার আপডেট হওয়া উত্তরে আপনার খুব দয়ালু এবং দরকারী প্রতিক্রিয়া অন্তর্ভুক্ত করেছেন। আপনার মতামতের জন্য সর্বাধিক বাধ্য!
এফ 1 লিনাক্স

@ ধাগ আপনার এবং কুসালানাদার প্রতিক্রিয়া অন্তর্ভুক্ত করার জন্য আমার উত্তরটি সবেমাত্র আপডেট করেছে সর্বাধিক আপনি ভাবেন সময় ও শ্রম গ্রহণ আমার answer- পুনর্বিচারের জন্য কৃতজ্ঞ
F1Linux

1
@ জেফশালার ক্রিসের নতুন সংশোধিত উত্তরের মতো "LC_COLLATE" নয়, "লেক্সোগ্রাফিক" ধরণের উল্লেখ করার ক্ষেত্রে আমি প্রথমে যে উত্তরটি দিয়েছিলাম তা প্রথমে জবাব দিয়েছি। আমি ক্রিসের প্রতিক্রিয়া জানিয়েছিলাম যা সঠিক এবং তার আপডেট হওয়া উত্তরটিকে সমর্থন করে। "লেক্সোগ্রাফিক" এবং "এলসি_কোলোলেট" হ'ল ভিন্ন জন্তু। ধন্যবাদ জেফ-
এফ 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.