আমি কেবল যুক্ত এবং মুছে ফেলা লাইনগুলি দেখতে কীভাবে আলাদা হতে পারি? ডিফ যদি এটি করতে না পারে তবে কোন সরঞ্জামটি করতে পারে?
diff A B | grep '^[<>]'
comm
।
আমি কেবল যুক্ত এবং মুছে ফেলা লাইনগুলি দেখতে কীভাবে আলাদা হতে পারি? ডিফ যদি এটি করতে না পারে তবে কোন সরঞ্জামটি করতে পারে?
diff A B | grep '^[<>]'
comm
।
উত্তর:
এটি দেখার আরেকটি উপায়:
কেবলমাত্র ফাইল ফাইলটিতে বিদ্যমান লাইনগুলি দেখান: (যেমনটি একটি থেকে মুছে ফেলা হয়েছে)
comm -23 a b
কেবলমাত্র ফাইল বিতে বিদ্যমান লাইনগুলি দেখান: (যেমন বিটিতে কী যুক্ত হয়েছিল)
comm -13 a b
কেবল একটি ফাইল বা অন্যটিতে বিদ্যমান লাইনগুলি দেখান: (তবে উভয়ই নয়)
comm -3 a b | sed 's/^\t//'
(সতর্কতা: যদি ফাইলের a
লাইন টিএব থেকে শুরু হয় তবে এটি (প্রথম টিএবি) আউটপুট থেকে সরানো হবে))
দ্রষ্টব্য:comm
সঠিকভাবে কাজ করার জন্য দুটি ফাইলই বাছাই করা দরকার । যদি সেগুলি ইতিমধ্যে বাছাই করা না থাকে তবে আপনার সেগুলি বাছাই করা উচিত:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
যদি ফাইলগুলি দীর্ঘ হয় তবে এটি অতিরিক্ত বোঝা হতে পারে কারণ এটির জন্য অতিরিক্ত অনুলিপি প্রয়োজন এবং তাই ডিস্কের দ্বিগুণ স্থান।
comm -12 <(sort a) <(sort b)
comm
আপনি যা চান তা করতে পারে এর ম্যান পৃষ্ঠা থেকে:
বর্ণনা
বাছাই করা ফাইলগুলি FILE1 এবং FILE2 লাইন লাইন দিয়ে তুলনা করুন।
কোনও বিকল্প নেই, তিন-কলাম আউটপুট উত্পাদন। কলামের একটিতে FILE1 এর জন্য স্বতন্ত্র রেখাগুলি রয়েছে, কলাম দুটিতে FILE2 এর জন্য অনন্য লাইন রয়েছে এবং তিনটি কলামে উভয় ফাইলের জন্য সাধারণ লাইন রয়েছে।
এই কলাম সহ suppressable হয় -1
, -2
এবং -3
যথাক্রমে।
উদাহরণ:
[root@dev ~]# cat a
common
shared
unique
[root@dev ~]# cat b
common
individual
shared
[root@dev ~]# comm -3 a b
individual
unique
এবং যদি আপনি কেবল অনন্য লাইন চান এবং কোন ফাইলটিতে আছেন সেদিকে খেয়াল রাখবেন না:
[root@dev ~]# comm -3 a b | sed 's/^\t//'
individual
unique
ম্যান পেজ যেমন বলেছে, ফাইলগুলি অবশ্যই আগে সাজানো হবে।
প্রসঙ্গ, লাইন নম্বর, +, -, <,> ছাড়াই সংযোজন এবং মোছা দেখাতে! ইত্যাদি, আপনি এই জাতীয় মত ব্যবহার করতে পারেন:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
উদাহরণস্বরূপ, দুটি ফাইল দেওয়া:
a.txt
Common
Common
A-ONLY
Common
b.txt
Common
B-ONLY
Common
Common
নিম্নলিখিত কমান্ডটি একটি থেকে সরানো বা খ-তে যুক্ত লাইনগুলি প্রদর্শন করবে:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
আউটপুট:
B-ONLY
A-ONLY
এই সামান্য ভিন্ন কমান্ড a.txt থেকে সরানো লাইনগুলি দেখায়:
diff --changed-group-format='%<' --unchanged-group-format='' a.txt b.txt
আউটপুট:
A-ONLY
অবশেষে, এই কমান্ডটি a.txt এ যুক্ত লাইনগুলি প্রদর্শন করবে
diff --changed-group-format='%>' --unchanged-group-format='' a.txt b.txt
আউটপুট
B-ONLY
এটি ডিফল্টরূপে পৃথকভাবে কী ঘটে ... হোয়াইটস্পেস উপেক্ষা করার জন্য আপনাকে কিছু পতাকা যুক্ত করতে হবে?
diff -b -B
ফাঁকা লাইন এবং স্পেসের বিভিন্ন সংখ্যা উপেক্ষা করা উচিত।
না, diff
আসলে দুটি ফাইলের মধ্যে পার্থক্যটি যেভাবে ভাবতে পারে সেভাবে প্রদর্শন করে না। এটি একটি সরঞ্জামের patch
জন্য অন্য একটি ফাইলকে পরিবর্তন করতে ব্যবহার করতে চাইলে এমন সরঞ্জামের জন্য সম্পাদনা কমান্ডগুলির ক্রম তৈরি করে।
আপনি যা খুঁজছেন তা করার কোনও অসুবিধা হ'ল এটি কীভাবে এটি সংজ্ঞায়িত করতে হবে যে একটি লাইন কী পরিবর্তন করে যা মুছে ফেলা বনাম একটি যুক্ত হওয়া অনুসরণ করে changed পাশাপাশি লাইনগুলি যুক্ত, মুছে ফেলা এবং একে অপরের সংলগ্ন পরিবর্তিত অবস্থায় কী করবেন।
diff
সূত্রগুলির দিকে নজর রাখার পরে অনেক দিন হয়ে গেছে , তবে দুটি ফাইল সিঙ্কে থাকার জন্য কোথায় মিলছে তা ট্র্যাক রাখতে আমি সমস্ত ধরণের জিরিশন মনে রাখি এবং আমার মনে হয় যে কতটা দূরে থাকা তার ভিত্তিতে ছেড়ে দেওয়ার জন্য একটি চৌম্বক রয়েছে লাইন হয়। তবে (allyচ্ছিকভাবে) ধসে পড়া সাদা জায়গা বা উপেক্ষা করা কেস বাদে কোনও ইন্টার-লাইন মিলের কথা আমার মনে নেই। বা (সম্ভবত) শব্দগুলি এতে প্রভাব ফেলে। যাই হোক না কেন, এটি সব কিছু patch
এবং "vgrep" সওয়ারের জন্য কেবল আসে। হতে পারে. মঙ্গলবারে.
ভিজ্যুয়াল তুলনা সরঞ্জাম দুটি ফাইল একসাথে ফিট করে যাতে একই সংখ্যার লাইনের সাথে পৃথক সামগ্রী সহ একটি বিভাগকে পরিবর্তিত বিভাগ হিসাবে বিবেচনা করা হবে। মিলে যাওয়া বিভাগগুলির মধ্যে সম্পূর্ণ নতুন রেখাগুলি যুক্ত বিভাগগুলিকে বিবেচনা করা হয়।
এটি এসডিফ কমান্ড-লাইন সরঞ্জামটি কীভাবে কাজ করে যা টার্মিনালে দুটি ফাইলের পাশাপাশি বাইরের তুলনা দেখায়। পরিবর্তিত লাইনগুলি দ্বারা পৃথক করা হয় | অক্ষর। যদি একটি লাইন কেবল এ ফাইলটিতে বিদ্যমান থাকে তবে <বিভাজক চরিত্র হিসাবে ব্যবহৃত হয়। যদি একটি ফাইল কেবল বি ফাইলটিতে থাকে তবে> বিভাজক হিসাবে ব্যবহৃত হয়। আপনার যদি ফাইলগুলিতে <এবং> অক্ষর না থাকে তবে আপনি কেবল যুক্ত লাইনগুলি দেখানোর জন্য এটি ব্যবহার করতে পারেন:
sdiff A B | grep '[<>]'
ধন্যবাদ সানরবী, আপনার সমাধান (ভোট দেওয়া হয়নি) আসলে আমাকে টন পৃষ্ঠাগুলিতে যুগে যুগে দেখার পরে যা চেয়েছিল তা হুবহু দিয়েছিল।
আপনার উত্তরটি ব্যবহার করে, আমি এখানে জিনিসগুলির তালিকা পরিবর্তন / যুক্ত / মুছে ফেলার জন্য নিয়ে এসেছি। উদাহরণটি / etc / passwd ফাইলের 2 সংস্করণ ব্যবহার করে এবং প্রাসঙ্গিক রেকর্ডগুলির জন্য ব্যবহারকারীর নাম মুদ্রণ করে।
#!/bin/bash
sdiff passwd1 passwd2 | grep '[|]' | awk -F: '{print "changed: " $1}'
sdiff passwd1 passwd2 | grep '[<]' | awk -F: '{print "deleted: " $1}'
sdiff passwd1 passwd2 | grep '[>]' | awk -F\> '{print $2}' | awk -F: '{print "added: " $1}'
আমি এই নির্দিষ্ট ফর্মটি প্রায়শই দরকারী বলে মনে করি:
diff --changed-group-format='-%<+%>' --unchanged-group-format='' f g
উদাহরণ:
printf 'a\nb\nc\nd\ne\nf\ng\n' > f
printf 'a\nB\nC\nd\nE\nF\ng\n' > g
diff --old-line-format=$'-%l\n' \
--new-line-format=$'+%l\n' \
--unchanged-line-format='' \
f g
আউটপুট:
-b
-c
+B
+C
-e
-f
+E
+F
সুতরাং এটি সাথে সাথে -
একই নতুন লাইন অনুসরণ করে পুরানো রেখাগুলি দেখায় +
।
আমাদের যদি একটি মুছে ফেলা থাকে C
:
printf 'a\nb\nd\ne\nf\ng\n' > f
printf 'a\nB\nC\nd\nE\nF\ng\n' > g
diff --old-line-format=$'-%l\n' \
--new-line-format=$'+%l\n' \
--unchanged-line-format='' \
f g
এটি দেখতে এরকম দেখাচ্ছে:
-b
+B
+C
-e
-f
+E
+F
ফর্ম্যাটটি এখানে নথিভুক্ত করা হয় man diff
:
--line-format=LFMT
format all input lines with LFMT`
এবং:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
এবং:
LFMT (only) may contain:
%L contents of line
%l contents of line, excluding any trailing newline
[...]
সম্পর্কিত প্রশ্ন: https://stackoverflow.com
উবুন্টুতে পরীক্ষিত 18.04।
file1:
text670_1
text067_1
text067_2
File2:
text04_1
text04_2
text05_1
text05_2
text067_1
text067_2
text1000_1
ব্যবহার করুন:
diff -y file1 file2
এটি প্রতিস্থাপনকারী ফাইলগুলির জন্য দুটি কলাম দেখায়।
আউটপুট:
text670_1
> text04_1
> text04_2
> text05_1
> text05_2
text067_1 text67_1
text067_2 text67_2
> text1000_1