সুতরাং মূলত আমি যা করতে চাই তা হ'ল কলাম 2 দিয়ে দুটি ফাইলের তুলনা করে আমি কীভাবে এটি সম্পাদন করতে পারি?
File_1.txt:
User1 US
User2 US
User3 US
File_2.txt:
User1 US
User2 US
User3 NG
আউটপুট ফাইল:
User3 has changed
সুতরাং মূলত আমি যা করতে চাই তা হ'ল কলাম 2 দিয়ে দুটি ফাইলের তুলনা করে আমি কীভাবে এটি সম্পাদন করতে পারি?
File_1.txt:
User1 US
User2 US
User3 US
File_2.txt:
User1 US
User2 US
User3 NG
আউটপুট ফাইল:
User3 has changed
উত্তর:
দেখব diff
কমান্ড। এটি একটি ভাল সরঞ্জাম এবং আপনি man diff
আপনার টার্মিনালটিতে টাইপ করে এগুলি সম্পর্কে সমস্ত কিছু পড়তে পারেন ।
আপনি যে কমান্ডটি করতে চাইবেন তা হ'ল diff File_1.txt File_2.txt
যা দুজনের মধ্যে পার্থক্য আউটপুট তৈরি করবে এবং এর মতো দেখতে হবে:
তৃতীয় কমান্ড থেকে আউটপুট পড়ার জন্য একটি দ্রুত নোট: 'তীর' ( <
এবং >
) রেখাটির বাম ফাইলটিতে ( <
) বনাম ডান ফাইল ( >
) বনাম যে ফাইলটি আপনি প্রবেশ করেছেন সেটিকে বোঝায় প্রথমে কমান্ড লাইনে, এই ক্ষেত্রেFile_1.txt
অতিরিক্তভাবে আপনি দেখতে পাচ্ছেন ৪ র্থ কমান্ডটি হ'ল diff ... | tee Output_File
এই পাইপগুলি থেকে ফলাফলগুলি এ diff
রূপান্তরিত হয় tee
যা এরপরে আউটপুটটিকে কোনও ফাইলে রাখে, যাতে আপনি পরে যদি এটি কনসোলে ঠিক দেখতে না চান তবে পরে সংরক্ষণ করতে পারবেন।
diff file1 file2 -s
। এখানে একটি উদাহরণ রয়েছে: imgur.com/ShrQx9x
অথবা আপনি মাইল্ড ডিফ ব্যবহার করতে পারেন
ফিল্ড আপনাকে ফাইল, ডিরেক্টরি এবং সংস্করণ নিয়ন্ত্রিত প্রকল্পগুলির তুলনা করতে সহায়তা করে। এটি ফাইল এবং ডিরেক্টরি উভয়ের উভয় এবং ত্রি-উপায়ে তুলনা সরবরাহ করে এবং অনেক জনপ্রিয় সংস্করণ নিয়ন্ত্রণ সিস্টেমের জন্য সমর্থন করে।
চালিয়ে ইনস্টল করুন:
sudo apt-get install meld
আপনার উদাহরণ:
ডিরেক্টরি তুলনা:
পাঠ্য পূর্ণ সহ উদাহরণ:
dos
এবং দ্বিতীয়টি দ্বিতীয়টি দেখায় বলে এটি আমাকে সহায়তা করেছিল unix
।
এফডাব্লুআইডাব্লু, আমি তার চেয়ে বেশি পছন্দ করি যা আমি ডফর থেকে পাশাপাশি পাশের আউটপুট দিয়ে পাই
diff -y -W 120 File_1.txt File_2.txt
কিছু দিতে হবে:
User1 US User1 US
User2 US User2 US
User3 US | User3 NG
আপনি কমান্ডটি ব্যবহার করতে পারেন cmp
:
cmp -b "File_1.txt" "File_2.txt"
আউটপুট হবে
a b differ: byte 25, line 3 is 125 U 116 N
cmp
diff
আপনি চান সমস্ত কি রিটার্ন কোডের চেয়ে অনেক দ্রুত ।
লিটারেরালি প্রশ্নের সাথে আঁকড়ে থাকা (ফাইল 1, ফাইল 2, আউটপুটফাইলে "পরিবর্তিত হয়েছে" বার্তা) নীচের স্ক্রিপ্টটি কাজ করে।
স্ক্রিপ্টটি একটি ফাঁকা ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন, কার্যকর হিসাবে কার্যকর করুন compare.py
, কমান্ড দিয়ে চালান:
/path/to/compare.py <file1> <file2> <outputfile>
এই পান্ডুলিপি:
#!/usr/bin/env python
import sys
file1 = sys.argv[1]; file2 = sys.argv[2]; outfile = sys.argv[3]
def readfile(file):
with open(file) as compare:
return [item.replace("\n", "").split(" ") for item in compare.readlines()]
data1 = readfile(file1); data2 = readfile(file2)
mismatch = [item[0] for item in data1 if not item in data2]
with open(outfile, "wt") as out:
for line in mismatch:
out.write(line+" has changed"+"\n")
কয়েকটি অতিরিক্ত লাইন দিয়ে, আপনি আউটপুটফাইলে সংজ্ঞায়িত করা হয় কিনা তার উপর নির্ভর করে এটি কোনও আউটপুটফাইলে, বা টার্মিনালে মুদ্রণ করতে পারেন:
একটি ফাইল মুদ্রণ করতে:
/path/to/compare.py <file1> <file2> <outputfile>
টার্মিনাল উইন্ডোতে মুদ্রণ করতে:
/path/to/compare.py <file1> <file2>
এই পান্ডুলিপি:
#!/usr/bin/env python
import sys
file1 = sys.argv[1]; file2 = sys.argv[2]
try:
outfile = sys.argv[3]
except IndexError:
outfile = None
def readfile(file):
with open(file) as compare:
return [item.replace("\n", "").split(" ") for item in compare.readlines()]
data1 = readfile(file1); data2 = readfile(file2)
mismatch = [item[0] for item in data1 if not item in data2]
if outfile != None:
with open(outfile, "wt") as out:
for line in mismatch:
out.write(line+" has changed"+"\n")
else:
for line in mismatch:
print line+" has changed"
একটি সহজ উপায় হ'ল ব্যবহার করা colordiff
, যা এর মতো আচরণ করে diff
তবে এর আউটপুটটিকে রঙিন করে। এটি ভিন্নতা পড়ার জন্য খুব সহায়ক helpful আপনার উদাহরণ ব্যবহার করে,
$ colordiff -u File_1.txt File_2.txt
--- File_1.txt 2016-12-24 17:59:17.409490554 -0500
+++ File_2.txt 2016-12-24 18:00:06.666719659 -0500
@@ -1,3 +1,3 @@
User1 US
User2 US
-User3 US
+User3 NG
যেখানে u
বিকল্পটি একটি ইউনিফাইড দেয়। বর্ণযুক্ত ডিফটি দেখতে কেমন:
colordiff
চালিয়ে ইনস্টল করুন sudo apt-get install colordiff
।
যদি ফাইলগুলির অংশগুলির মধ্যে পার্থক্য রয়েছে তা জানার দরকার নেই তবে আপনি ফাইলটির চেকসাম ব্যবহার করতে পারেন। এটি করার অনেক উপায় আছে md5sum
বা ব্যবহার করে sha256sum
। মূলত, তাদের প্রত্যেকটি একটি স্ট্রিং আউটপুট করে যা একটি ফাইলের সামগ্রী হ্যাশ করে। দুটি ফাইল যদি একই হয় তবে তাদের হ্যাশও একই হবে। আপনি প্রায়শই সফ্টওয়্যার ডাউনলোড করার সময় এটি ব্যবহার করা হয় যেমন উবুন্টু ইনস্টলেশন আইসো চিত্র। এগুলি প্রায়শই ডাউনলোড করা সামগ্রীর অখণ্ডতা যাচাই করার জন্য ব্যবহৃত হয়।
নীচের স্ক্রিপ্টটি বিবেচনা করুন, যেখানে আপনি দুটি ফাইলকে আর্গুমেন্ট হিসাবে দিতে পারেন এবং ফাইলটি সেগুলি একই কিনা তা আপনাকে জানায়।
#!/bin/bash
# Check if both files exist
if ! [ -e "$1" ];
then
printf "%s doesn't exist\n" "$1"
exit 2
elif ! [ -e "$2" ]
then
printf "%s doesn't exist\n" "$2"
exit 2
fi
# Get checksums of eithe file
file1_sha=$( sha256sum "$1" | awk '{print $1}')
file2_sha=$( sha256sum "$2" | awk '{print $1}')
# Compare the checksums
if [ "x$file1_sha" = "x$file2_sha" ]
then
printf "Files %s and %s are the same\n" "$1" "$2"
exit 0
else
printf "Files %s and %s are different\n" "$1" "$2"
exit 1
fi
নমুনা রান:
$ ./compare_files.sh /etc/passwd ./passwd_copy.txt
Files /etc/passwd and ./passwd_copy.txt are the same
$ echo $?
0
$ ./compare_files.sh /etc/passwd /etc/default/grub
Files /etc/passwd and /etc/default/grub are different
$ echo $?
1
এছাড়াও comm
কমান্ড রয়েছে যা দুটি বাছাই করা ফাইলের তুলনা করে এবং 3 টি কলমে আউটপুট দেয়: # 1 ফাইলের জন্য আইটেমের জন্য কলাম 1, ফাইল # 2-তে আইটেমের জন্য কলাম 2 এবং উভয় ফাইলে উপস্থিত আইটেমগুলির জন্য কলাম 3।
যে কোনও কলামটি দমন করতে আপনি সুইচ -1, -2, এবং -3 ব্যবহার করতে পারেন। -3 ব্যবহার করে ভিন্ন লাইনগুলি প্রদর্শিত হবে।
বেলো আপনি কমান্ডের স্ক্রিনশটটিকে কার্য করতে দেখতে পাচ্ছেন।
একটি মাত্র প্রয়োজনীয়তা আছে - ফাইলগুলি সঠিকভাবে তুলনা করার জন্য তাদের অবশ্যই বাছাই করতে হবে। sort
কমান্ড যে উদ্দেশ্যে ব্যবহার করা যেতে পারে। বেলো হ'ল আরেকটি স্ক্রিনশট, যেখানে ফাইলগুলি সাজানো হয় এবং তারপরে তুলনা করা হয়। বাম দিক থেকে শুরু হওয়া লাইনগুলি কেবল ফাইল_1 এ শুরু হবে, কলাম 2 থেকে শুরু হওয়া লাইনগুলি কেবল ফাইল_2 এর অন্তর্গত
গিট ইনস্টল করুন এবং ব্যবহার করুন
$ git diff filename1 filename2
এবং আপনি সুন্দর রঙিন বিন্যাসে আউটপুট পাবেন
গিট ইনস্টলেশন
$ apt-get update
$ apt-get install git-core
বিন্যাসে 2 টি ফাইলের মধ্যে নাম / মান জোড়ার তুলনা করে name value\n
। লিখেছেন name
করতে Output_file
যদি পরিবর্তন করেছেন। সহযোগী অ্যারেগুলির জন্য ব্যাশ ভি 4 + প্রয়োজন ।
$ ./colcmp.sh File_1.txt File_2.txt
User3 changed from 'US' to 'NG'
no change: User1,User2
$ cat Output_File
User3 has changed
cmp -s "$1" "$2"
case "$?" in
0)
echo "" > Output_File
echo "files are identical"
;;
1)
echo "" > Output_File
cp "$1" ~/.colcmp.array1.tmp.sh
sed -i -E "s/([^A-Za-z0-9 ])/\\\\\\1/g" ~/.colcmp.array1.tmp.sh
sed -i -E "s/^(.*)$/#\\1/" ~/.colcmp.array1.tmp.sh
sed -i -E "s/^#\\s*(\\S+)\\s+(\\S.*?)\\s*\$/A1\\[\\1\\]=\"\\2\"/" ~/.colcmp.array1.tmp.sh
chmod 755 ~/.colcmp.array1.tmp.sh
declare -A A1
source ~/.colcmp.array1.tmp.sh
cp "$2" ~/.colcmp.array2.tmp.sh
sed -i -E "s/([^A-Za-z0-9 ])/\\\\\\1/g" ~/.colcmp.array2.tmp.sh
sed -i -E "s/^(.*)$/#\\1/" ~/.colcmp.array2.tmp.sh
sed -i -E "s/^#\\s*(\\S+)\\s+(\\S.*?)\\s*\$/A2\\[\\1\\]=\"\\2\"/" ~/.colcmp.array2.tmp.sh
chmod 755 ~/.colcmp.array2.tmp.sh
declare -A A2
source ~/.colcmp.array2.tmp.sh
USERSWHODIDNOTCHANGE=
for i in "${!A1[@]}"; do
if [ "${A2[$i]+x}" = "" ]; then
echo "$i was removed"
echo "$i has changed" > Output_File
fi
done
for i in "${!A2[@]}"; do
if [ "${A1[$i]+x}" = "" ]; then
echo "$i was added as '${A2[$i]}'"
echo "$i has changed" > Output_File
elif [ "${A1[$i]}" != "${A2[$i]}" ]; then
echo "$i changed from '${A1[$i]}' to '${A2[$i]}'"
echo "$i has changed" > Output_File
else
if [ x$USERSWHODIDNOTCHANGE != x ]; then
USERSWHODIDNOTCHANGE=",$USERSWHODIDNOTCHANGE"
fi
USERSWHODIDNOTCHANGE="$i$USERSWHODIDNOTCHANGE"
fi
done
if [ x$USERSWHODIDNOTCHANGE != x ]; then
echo "no change: $USERSWHODIDNOTCHANGE"
fi
;;
*)
echo "error: file not found, access denied, etc..."
echo "usage: ./colcmp.sh File_1.txt File_2.txt"
;;
esac
কোডটি ভেঙে দেওয়া এবং এর অর্থ কী, আমার বোঝার সেরা। আমি সম্পাদনা এবং পরামর্শ স্বাগত জানাই।
cmp -s "$1" "$2"
case "$?" in
0)
# match
;;
1)
# compare
;;
*)
# error
;;
esac
সিএমপি $ এর মান নির্ধারণ করবে ? যেমন অনুসরণ করে :
আমি কেস .. ইস্যাক বিবৃতি al প্রমাণ করতে ব্যবহার করতে বেছে নিয়েছি ? কারণ $ এর মান ? পরীক্ষার ([) সহ প্রতিটি কমান্ডের পরে পরিবর্তন হয় ।
বিকল্পভাবে আমি vari এর মান ধরে রাখতে কোনও ভেরিয়েবল ব্যবহার করতে পারতাম ? :
cmp -s "$1" "$2"
CMPRESULT=$?
if [ $CMPRESULT -eq 0 ]; then
# match
elif [ $CMPRESULT -eq 1 ]; then
# compare
else
# error
fi
উপরে কেস স্টেটমেন্ট হিসাবে একই জিনিস। আইডিকে যা আমি আরও ভাল পছন্দ করি।
echo "" > Output_File
উপরে আউটপুট ফাইল সাফ করে যদি কোনও ব্যবহারকারী পরিবর্তন না করে তবে আউটপুট ফাইলটি খালি থাকবে।
আমি কেস স্টেটমেন্টের ভিতরে এটি করি যাতে আউটপুট_ফাইলে ত্রুটি অপরিবর্তিত থাকে।
cp "$1" ~/.colcmp.arrays.tmp.sh
বর্তমানের ব্যবহারকারীর বাড়ির দির উপরে ফাইল_1.txt অনুলিপি করুন ।
উদাহরণস্বরূপ, যদি বর্তমান ব্যবহারকারী জন হয় তবে উপরেরটি সিপি "ফাইল_1.txt" / home/john/.colcmp.arrays.tmp.sh এর সমান হবে
মূলত, আমি অদ্ভুত। আমি জানি যে এই অক্ষরগুলির বিশেষ অর্থ হতে পারে বা কোনও বহিরাগত প্রোগ্রাম কার্যকর করতে পারে যখন ভেরিয়েবল অ্যাসাইনমেন্টের অংশ হিসাবে কোনও স্ক্রিপ্টে চালানো হয়:
আমি যা জানি না তা হ'ল বাশ সম্পর্কে আমি কতটা জানি না। অন্যান্য চরিত্রগুলির বিশেষ অর্থ কী তা আমি জানি না, তবে আমি ব্যাকস্ল্যাশ দিয়ে সেগুলি থেকে পালাতে চাই:
sed -i -E "s/([^A-Za-z0-9 ])/\\\\\\1/g" ~/.colcmp.array1.tmp.sh
সেড নিয়মিত এক্সপ্রেশন প্যাটার্ন মিলের চেয়ে আরও অনেক কিছু করতে পারে । স্ক্রিপ্ট প্যাটার্ন "s / (সন্ধান করুন) / (প্রতিস্থাপন) /" বিশেষত প্যাটার্ন ম্যাচটি সম্পাদন করে।
"S / (খোঁজ) / (প্রতিস্থাপন) / (সংশোধনকারীদের)"
ইংরাজীতে: যেকোন বিরামচিহ্ন বা বিশেষ চরিত্রকে ক্যাপিউশন গ্রুপ 1 (1) হিসাবে ক্যাপচার করুন
ইংরাজীতে: ব্যাকস্ল্যাশ সহ সমস্ত বিশেষ অক্ষর উপসর্গ করুন
ইংরাজীতে: একই লাইনে যদি একাধিক মিল খুঁজে পাওয়া যায়, তবে সেগুলি সব প্রতিস্থাপন করুন
sed -i -E "s/^(.*)$/#\\1/" ~/.colcmp.arrays.tmp.sh
উপরে বাশ কমেন্টের অক্ষর ( # ) দিয়ে ~ / .colcmp.arrays.tmp.sh এর প্রতিটি লাইন উপসর্গ করতে নিয়মিত অভিব্যক্তি ব্যবহার করা হয় । আমি এটি কারণ কারণ পরে আমি উত্স কমান্ডটি ব্যবহার করে ~ / .colcmp.arrays.tmp.sh সম্পাদন করতে চাইছি এবং কারণ আমি নিশ্চিতভাবে ফাইল_1 . txt এর পুরো ফর্ম্যাটটি জানি না ।
আমি ঘটনাক্রমে স্বেচ্ছাসেবক কোডটি কার্যকর করতে চাই না। আমার মনে হয় না কেউ করে।
"S / (খোঁজ) / (প্রতিস্থাপন) /"
ইংরাজীতে: প্রতিটি লাইনকে ক্যাপিউশন গ্রুপ 1 (1 \\) হিসাবে ক্যাপচার করুন
ইংরাজীতে: প্রতি লাইনের প্রতিস্থাপন করুন একটি পাউন্ড প্রতীক এবং তারপরে রেখাটি প্রতিস্থাপন করা হয়েছিল
sed -i -E "s/^#\\s*(\\S+)\\s+(\\S.*?)\\s*\$/A1\\[\\1\\]=\"\\2\"/" ~/.colcmp.arrays.tmp.sh
উপরে এই স্ক্রিপ্টটির মূল অংশ রয়েছে।
#User1 US
A1[User1]="US"
A2[User1]="US"
(২ য় ফাইলের জন্য)"S / (খোঁজ) / (প্রতিস্থাপন) /"
ইংরেজীতে:
গ্রুপ 2 হিসাবে ক্যাপচার করুন
(প্রতিস্থাপন) = এ 1 \\ [\\ 1 \\] = \ "\\ 2 \"
A1[
অ্যারেতে অ্যারে নিয়োগ শুরু করতে calledA1
]="
]
= অ্যারে অ্যাসাইনমেন্ট বন্ধ করুন যেমন A1[
ব্যবহারকারী 1 ]="
মার্কিন"
=
= অ্যাসাইনমেন্ট অপারেটর যেমন ভেরিয়েবল = মান"
স্পেস ক্যাপচার করার জন্য = উদ্ধৃতি মান ... যদিও এখন আমি এটি সম্পর্কে চিন্তা করি তবে উপরের কোডটি যে সমস্ত কিছুকে ব্যাকস্ল্যাশ করে স্পেস অক্ষরগুলিকে ব্যাকস্ল্যাশ করতে দেওয়া সহজতর হত।ইংরাজীতে: বিন্যাসে #name value
অ্যারে অ্যাসাইনমেন্ট অপারেটরের সাথে বিন্যাসের প্রতিটি লাইন প্রতিস্থাপন করুনA1[name]="value"
chmod 755 ~/.colcmp.arrays.tmp.sh
উপরে অ্যারে স্ক্রিপ্ট ফাইলটি কার্যকর করার জন্য chmod ব্যবহার করে ।
আমি নিশ্চিত না এটি প্রয়োজনীয় কিনা।
declare -A A1
মূলধন -A ইঙ্গিত করে যে ঘোষিত ভেরিয়েবলগুলি সংঘবদ্ধ অ্যারে হবে ।
এই কারণেই স্ক্রিপ্টটির জন্য bash v4 বা ততোধিক প্রয়োজন।
source ~/.colcmp.arrays.tmp.sh
আমাদের আগে থেকেই আছে:
User value
লাইনের কাছে A1[User]="value"
,বর্তমান শেলটিতে এটি চালনার জন্য আমরা উপরে স্ক্রিপ্টটি উত্স করি। আমরা এটি করি যাতে আমরা স্ক্রিপ্ট দ্বারা সেট করা পরিবর্তনশীল মানগুলি রাখতে পারি। আপনি যদি স্ক্রিপ্টটি সরাসরি চালনা করেন তবে এটি একটি নতুন শেল তৈরি করে এবং যখন নতুন শেলটি বের হয় তখন পরিবর্তনশীল মানগুলি নষ্ট হয়ে যায় বা অন্তত এটি আমার বোধগম্য হয়।
cp "$2" ~/.colcmp.array2.tmp.sh
sed -i -E "s/([^A-Za-z0-9 ])/\\\\\\1/g" ~/.colcmp.array2.tmp.sh
sed -i -E "s/^(.*)$/#\\1/" ~/.colcmp.array2.tmp.sh
sed -i -E "s/^#\\s*(\\S+)\\s+(\\S.*?)\\s*\$/A2\\[\\1\\]=\"\\2\"/" ~/.colcmp.array2.tmp.sh
chmod 755 ~/.colcmp.array2.tmp.sh
declare -A A2
source ~/.colcmp.array2.tmp.sh
আমরা thing 1 এবং A1 এর জন্য একই জিনিস করি যা আমরা $ 2 এবং A2 এর জন্য করি । এটি সত্যিই একটি ফাংশন হওয়া উচিত। আমি মনে করি এই মুহুর্তে এই স্ক্রিপ্টটি যথেষ্ট বিভ্রান্তিকর এবং এটি কাজ করে, তাই আমি এটি ঠিক করব না।
for i in "${!A1[@]}"; do
# check for users removed
done
সহযোগী অ্যারে কীগুলির মাধ্যমে উপরের লুপগুলি
if [ "${A2[$i]+x}" = "" ]; then
উপরে ভেরিয়েবল বনাম একটি মানের মধ্যে পার্থক্য সনাক্ত করতে ভেরিয়েবল বিকল্প ব্যবহার করে যা সুস্পষ্টভাবে শূন্য দৈর্ঘ্যের স্ট্রিংয়ে সেট করা হয়েছে vari
স্পষ্টতই, অনেকগুলি উপায় আছে যা দেখার জন্য একটি ভেরিয়েবল সেট করা হয়েছে । আমি সবচেয়ে বেশি ভোট দিয়ে তাকে বেছে নিয়েছি।
echo "$i has changed" > Output_File
উপরে ব্যবহারকারী আউটপুট_ফাইলে adds i যুক্ত করে
USERSWHODIDNOTCHANGE=
উপরে একটি ভেরিয়েবল সাফ করে তাই আমরা যে ব্যবহারকারীদের পরিবর্তন হয়নি তাদের ট্র্যাক রাখতে পারি।
for i in "${!A2[@]}"; do
# detect users added, changed and not changed
done
সহযোগী অ্যারে কীগুলির মাধ্যমে উপরের লুপগুলি
if ! [ "${A1[$i]+x}" != "" ]; then
উপরে ভেরিয়েবল সেট করা হয়েছে কিনা তা দেখতে ভেরিয়েবল বিকল্প ব্যবহার করে ।
echo "$i was added as '${A2[$i]}'"
কারণ $ i অ্যারে কী (ব্যবহারকারীর নাম) $ এ 2 [$ i] এর বর্তমান ফাইলটির সাথে যুক্ত মানটি ফাইল_2 . txt থেকে ফেরত দেওয়া উচিত ।
উদাহরণস্বরূপ, যদি $ i ব্যবহারকারী 1 হয়, উপরেরগুলি $ {এ 2 [ব্যবহারকারী 1] as হিসাবে পড়ে
echo "$i has changed" > Output_File
উপরে ব্যবহারকারী আউটপুট_ফাইলে adds i যুক্ত করে
elif [ "${A1[$i]}" != "${A2[$i]}" ]; then
কারণ $ i অ্যারে কী (ব্যবহারকারীর নাম) $ এ 1 [$ i] এর বর্তমান ব্যবহারকারী সাথে সম্পর্কিত মানটি ফাইল_1 . txt থেকে ফিরিয়ে দেওয়া উচিত এবং _2 এ 2 [$ i] ফাইল_2 . txt থেকে মানটি ফিরিয়ে আনতে হবে ।
উপরে উভয় ফাইল থেকে ব্যবহারকারী the i এর জন্য সম্পর্কিত মানগুলি তুলনা করে ..
echo "$i has changed" > Output_File
উপরে ব্যবহারকারী আউটপুট_ফাইলে adds i যুক্ত করে
if [ x$USERSWHODIDNOTCHANGE != x ]; then
USERSWHODIDNOTCHANGE=",$USERSWHODIDNOTCHANGE"
fi
USERSWHODIDNOTCHANGE="$i$USERSWHODIDNOTCHANGE"
উপরে পরিবর্তিত নয় এমন ব্যবহারকারীদের একটি কমা বিচ্ছিন্ন তালিকা তৈরি করে। নোট করুন তালিকার কোনও স্থান নেই, না হলে পরবর্তী চেকটি উদ্ধৃত করা দরকার।
if [ x$USERSWHODIDNOTCHANGE != x ]; then
echo "no change: $USERSWHODIDNOTCHANGE"
fi
উপরে $ USERSWHIDIDNOTCHANGE এর মান প্রতিবেদন করে তবে কেবলমাত্র $ USERSWHODIDNOTCHANGE এ কোনও মান থাকে । এটি যেভাবে লেখা হয়েছে, $ USWWODIDNOTCHANGE এ কোনও স্পেস থাকতে পারে না। যদি এটিতে ফাঁকা স্থানের প্রয়োজন হয় তবে উপরেরটি নীচে পুনরায় লেখা যেতে পারে:
if [ "$USERSWHODIDNOTCHANGE" != "" ]; then
echo "no change: $USERSWHODIDNOTCHANGE"
fi
diff "File_1.txt" "File_2.txt"