সদৃশগুলি সরানোর সময় দুটি তালিকা মার্জ করুন Mer


18

আমার ব্যাসিবক্স (ওপেনডাব্লুআরটি) ব্যবহার করে একটি এমবেডেড লিনাক্স সিস্টেম রয়েছে - সুতরাং আদেশগুলি সীমাবদ্ধ। আমার মতো দুটি ফাইল রয়েছে যা দেখতে:

প্রথম ফাইল

aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn

দ্বিতীয় ফাইল

mmmmmm
nnnnnn
yyyyyy
zzzzzz

আমাকে এই 2 টি তালিকা 1 টি ফাইলের সাথে একত্রীকরণ করতে হবে এবং নকলগুলি সরিয়ে ফেলতে হবে। আমি পরিবর্তন আপনার কাছে নেই (স্থান সীমিত) তাই আমরা মহান ব্যবহার করতে পেতে awk, sedএবং grep(অথবা অন্যান্য সরঞ্জামগুলি আমাদের কাছে একটি প্রমিত busybox উদাহরণস্বরূপ অন্তর্ভুক্ত হতে পারে)। একত্রিত ফাইলে যাচ্ছি:

command1 > mylist.merge 
command2 mylist.merge > originallist

পুরোপুরি ঠিক আছে। এটি একটি একক লাইন কমান্ড হতে হবে না।

বর্তমানে আমি ব্যাসিবক্সের উদাহরণে সংজ্ঞায়িত ফাংশনগুলি (ডিফল্ট ওপেনডাব্লুআরটি): [, [[, আরপিং, অ্যাশ, অ্যাজ্ক, বেসনাম, ব্র্যাক্টল, বুনজিপ 2, বিজক্যাট, বিড়াল, সিজিআরপি, চিডম, শাঁস, ক্রোট, ক্লিয়ার, সিএমপি, সিপি, ক্রন্ড, ক্রন্টব, কাট, তারিখ, ডিডি, ডিএফ, ডারনাম, ডেমসগ, ডু, ইকো, এগ্রিপ, এনভি, এক্সপি, ভুয়া, এফগ্রিপ, সন্ধান করুন, ফ্রি, ফ্যানসিএনসি, গ্রেপ, গুনজিপ, জিজিপ, হোল্ট, হেড, হেক্সডাম্প, হোস্টেড, এইচডাব্লক, আইডি, ইফকনফিগ, আরআর, ইনসোড, কিল, কিল্ল, ক্লগড, কম, এলএন, লক, লগার, লগ্রেড, এলএস, এলএসএমড, এমডি 5সাম, এমকিডিআইআর, এমকিফিফো, এমকেএনড, এমকেটেম্প, মাউন্ট, এমভি, এনসি, নেটএসজি, নেটস্যাট, সুন্দর, এনস্ক্লুআপ, এনটিপিডি, পাসডাব্লুড, পিগ্রিপ, পিডোফ, পিং, পিং 6, পিভট_রোট, পিকিল, পাওয়ারফট, প্রিন্টফ, পিএস, পিডাব্লুড, রিবুট, রিসেট, আরএম, আরএমডিির, আরএমমড, রুট, সেড, সিক, শ, স্লিপ, বাছাই করুন, স্টার্ট-স্টপ-ডেমন, স্ট্রিংস, সুইচ_রোট, সিঙ্ক, সিস্টেল, সিসলগড, লেজ, টার, টি, টেলনেট, টেলনেট, পরীক্ষা,সময়, শীর্ষ, স্পর্শ, টিআর, ট্রেস্রোয়েট, সত্য, udcpc, umount, uname, uniq, আপটাইম, vconfig, vi, ওয়াচডগ, WC, উইজেট, যা, xargs, হ্যাঁ, zcat

উত্তর:


28

আমি মনে করি

sort file1 file2 | uniq
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
yyyyyy
zzzzzz

আপনি যা চান তা করবে

অতিরিক্ত ডকুমেন্টেশন: ইউনিট সাজান


8
ব্যস্তবক্স সাজান অনন্য পতাকা সমর্থন করে -u
থোর

@ থোর: ওহ চিয়ারস এটি এমন একটি স্যুইচ নয় যা আমি পরিচিত।


4

আরেকটি সমাধান:

awk '!a[$0]++' file_1 file_2

আমি দেখেছি যে এটি একটি পার্থক্য তৈরি করেছে যা প্রথমে যুক্তিটি এসেছে। অন্যথায় দুর্দান্ত সমাধান, ধন্যবাদ।
dezza

2

কিছু কী কলাম অনুসারে বাছাই করতে নিম্নলিখিত ব্যবহার করুন:

awk '!duplicate[$1,$2,$3]++' file_1 file_2

এখানে আপনার প্রাথমিক কী হিসাবে প্রথম, দ্বিতীয় এবং তৃতীয় কলামটি বিবেচনা করুন।


1

আপনার প্রশ্নের ফাইলগুলি বাছাই করা হয়েছে।
যদি উত্স ফাইলগুলি সত্যই বাছাই করা হয় তবে আপনি একীক এবং এক ধাপে মার্জ করতে পারেন:

sort -um file1 file2 > mylist.merge

সংখ্যার সাজানোর জন্য (বর্ণানুক্রমিক নয়) ব্যবহার করুন:

sort -num file1 file2 > mylist.merge

যে পারে না (এক সোর্স ফাইল থেকে আপনাকে পুনঃনির্দেশিত) এ জায়গা সম্পন্ন করা।

যদি ফাইলগুলি বাছাই না করা হয় তবে তাদের বাছাই করুন (বাছাই বিকল্পটি ব্যবহার করে এই সাজ্টটি জায়গায় করা যেতে পারে -oHowever তবে, পুরো ফাইলটি মেমরিতে লোড করা দরকার):

sort -uo file1 file1
sort -uo file2 file2
sort -um file1 file2 > mylist.merge
mv mylist.merge originallist

সকলকে সাজানোর জন্য এটি সহজ "এক কমান্ড লাইন" এর চেয়ে দ্রুত হবে:

cat file1 file2 | sort -u >mylist.merge

তবে এই লাইনটি ছোট ফাইলগুলির জন্য কার্যকর হতে পারে।

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