আমি comm
দু'টি সাজানো ফাইলের তুলনা করতাম । এই ফাইলগুলির প্রতিটি লাইন ধনাত্মক পূর্ণসংখ্যার সংখ্যা। তবে ফলাফলগুলি দেখায়
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
এই দুটি ফাইল বাছাই করা হলেও ত্রুটি কিভাবে আসবে?
আমি comm
দু'টি সাজানো ফাইলের তুলনা করতাম । এই ফাইলগুলির প্রতিটি লাইন ধনাত্মক পূর্ণসংখ্যার সংখ্যা। তবে ফলাফলগুলি দেখায়
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
এই দুটি ফাইল বাছাই করা হলেও ত্রুটি কিভাবে আসবে?
উত্তর:
comm
লেক্সিকোগ্রাফিক সাজানোর (প্লেইন sort
) প্রয়োজন, সংখ্যার সাজানোর ( sort -n
) নয়। উদাহরণস্বরূপ, এটি নিম্নলিখিত আদেশটি চায়:
1
2000
300
নিম্নলিখিত আদেশ নয়:
1
300
2000
এটি সংশোধন করুন এবং সমস্যাটি দূরে যাওয়া উচিত। আরো গূঢ় ক্ষেত্রে যেখানে জন্য comm
এর লোকেল থেকে আলাদা হতে পারে sort
লোকেল, আপনি চালাতে চান পারে sort
এবং comm
সঙ্গে LC_COLLATE=C
তাদের পরিবেশের দেশীয় বাইট ক্রম ব্যবহার করতে।
sort -n
sort
সঙ্গে , এবং ছাড়া-n
সুইচ এবং শুধুমাত্র প্রমান দিয়ে-n
সুইচ আপনি অর্জন করতে পারেন সঠিক বৃদ্ধি অর্ডার আপনি স্বীকার করেন আপনার নিজের উত্তর প্রয়োজন।
comm
আক্ষরিক LC_COLLATE
ডি অর্ডার প্রয়োজন । আপনার উত্তরের ত্রুটিগুলি আপনার পরীক্ষার সেটের বাইরের উদাহরণগুলির জন্য নিখুঁতভাবে প্রসাধনী নয় ... এটির জন্য যথেষ্ট বলুন না কেউ ইতিবাচক সংখ্যার জন্য বাছাইয়ের জন্য বলেন নি।
ওপি একটি ত্রুটি বার্তা গ্রহন করেন সম্বন্ধে " ফাইল সাজানো ক্রম নয় যখন ব্যবহার" comm
তুলনা করতে ধনাত্মক পূর্ণসংখ্যা ফাইল, না পাঠে। সুতরাং আমরা দশমিক নয় সংখ্যা নিয়ে কাজ করছি।
সরবরাহিত ফলাফলগুলি বাছাই করতে ব্যবহৃত কমান্ডের -n
সাথে স্যুইচ ব্যবহারের উপর নির্ভর করে প্রাপ্ত sort
ফলাফলের comm
ক্রমটি comm
ভিন্ন হতে পারে:
লেক্সোগ্রাফিক : -n
বাছাইয়ের সাথে স্যুইচটি ব্যবহারের ফলে "ধনাত্মক পূর্ণসংখ্যার" ক্রমবর্ধমান সংখ্যার ক্রম অনুসারে অর্ডার হবে। Errorcomm
এর সুইচ ব্যবহার করে " ত্রুটি " দমন করা যায়--nocheck-order
বাইট অর্ডার : এর সাথে কোনও ব্যবহার নেই । আদেশটি নির্ধারণ করে যা কমান্ডটি কার্যকর করা হয় সেখানে হোস্টে সেট করা কীভাবে পৃথক হতে পারে । এটি ইনপুটটি ডিফল্টরূপে প্রত্যাশা করে। এখানে আরও কিছু পাওয়া যাবে: রেফারেন্স 1 এবং রেফারেন্স 2-n switch
sort
LC_COLLATE
locale
comm
LC_COLLATE
ত্রুটিটি কি সমস্যা?
এটি আপনি অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে। আপনি উদাহরণ নীচে দেখতে পাবেন যে,comm
ফাইল তুলনা পর একই ফলাফল ফেরৎ দিয়ে বা ছাড়া sort
`গুলি-n
, সুইচ যদিও তাদের ক্রম কিনা তার উপর নির্ভর করে উপরে ভাবে পরিবর্তিত হতে হবে-n switch
সঙ্গে ব্যবহার করা হয়sort
কমান্ড। নিজেই, আমি "লেক্সোগ্রাফিক" অর্ডার করা ফলাফলগুলি পছন্দ করি - সংখ্যায় যা ক্রমবর্ধমান।
তবে আপনি যদি " লেক্সোগ্রাফিক " ক্রমে ফলাফলগুলি না চান তবে তুলনার জন্য সরবরাহ করা ডেটা বাছাই করার সময় স্যুইচটি ব্যবহার করবেন না ।-n
comm
আমরা 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