perl -F, -lane '
exists $h{$F[0]} or $h[$h{$F[0]}=@h]=$_;
$h=$_; /,false$/ or $_=$h for $h[$h{$F[0]}];
END{ print for @h; }
' duplicates.file
উপাত্ত কাঠামো:
- হ্যাশ
%h
যার চাবিগুলি প্রথম ক্ষেত্র (এএএ, বিবিবি, সিসিসি, ইত্যাদি) এবং সংশ্লিষ্ট মানগুলি এমন ক্রমগুলি দেখায় যাতে কীগুলি সম্মুখীন হয়েছিল। সুতরাং, উদাহরণস্বরূপ, কী এএএ => 0, কী বিবিবি => 1, কী সিসিসি => 2।
- অ্যারে
@h
যার উপাদানগুলি মুদ্রণের ক্রমে অন্তর্ভুক্ত লাইন রয়েছে। সুতরাং যদি সত্য এবং মিথ্যা উভয়ই ডেটাতে পাওয়া যায়, তবে মিথ্যা মানটি অ্যারেতে চলে যাবে। OTW, যদি এক ধরণের ডেটা থাকে তবে তা উপস্থিত থাকবে that
আর একটি উপায় জিএনইউ সেড ব্যবহার করছে:
sed -Ee '
G
/^([^,]*),(false|true)\n(.*\n)?\1,\2(\n|$)/ba
/^([^,]*)(,true)\n(.*\n)?\1,false(\n|$)/ba
/^([^,]*)(,false)\n((.*\n)?)\1,true(\n|$)/{
s//\3\1\2\5/;h;ba
}
s/([^\n]*)\n(.*)$/\2\n\1/;s/^\n*//
h;:a;$!d;g
' duplicates.file
FWIW, উপরের জিএনইউ-সেড কোডের জন্য পসিক্স সমতুল্য কোডটি নীচে তালিকাভুক্ত করা হয়েছে:
sed -e '
G
/^\([^,]*\),\(false\)\n\(.*\n\)\{0,1\}\1,\2$/ba
/^\([^,]*\),\(false\)\n\(.*\n\)\{0,1\}\1,\2\n/ba
/^\([^,]*\),\(true\)\n\(.*\n\)\{0,1\}\1,\2$/ba
/^\([^,]*\),\(true\)\n\(.*\n\)\{0,1\}\1,\2\n/ba
/^\([^,]*\),true\n\(.*\n\)\{0,1\}\1,false$/ba
/^\([^,]*\),true\n\(.*\n\)\{0,1\}\1,false\n/ba
/^\([^,]*\)\(,false\)\n\(\(.*\n\)\{0,1\}\)\1,true$/{
s//\3\1\2/
h
ba
}
/^\([^,]*\)\(,false\)\n\(\(.*\n\)\{0,1\}\)\1,true\n/{
s//\3\1\2\n/
h
ba
}
y/\n_/_\n/
s/\([^_]*\)_\(.*\)$/\2_\1/;s/^_*//
y/\n_/_\n/
h;:a;$!d;g
' duplicates.file
ব্যাখ্যা
- এই পদ্ধতিতে আমরা ফলাফলটি অবশেষে হোল্ড স্পেসে মুদ্রিত করতে সঞ্চয় করি।
- প্রতিটি লাইনের পঠনের জন্য, হোল্ড স্পেসটির বিদ্যমান অবস্থার তুলনায় বর্তমান লাইনের পরীক্ষার জন্য আমরা হোল্ড স্পেসটি প্যাটার্ন স্পেসে যুক্ত করব।
- এই তুলনার সময় এখন 5 টি জিনিস সম্ভবত ঘটতে পারে:
- ক) বর্তমান লাইনটি হোল্ড লাইনের কোথাও মেলে এবং মিথ্যা: মিথ্যা।
- [ক্রিয়া] যেহেতু একই ভুয়া অবস্থা পাওয়া যায়, তাই কিছুই করবেন না।
- খ) বর্তমান লাইনটি হোল্ড লাইনের কোথাও মেলে এবং সত্য: সত্য।
- [ক্রিয়া] যেহেতু একই প্রকৃত অবস্থা পাওয়া যায়, তাই কিছুই করবেন না।
- গ) বর্তমান লাইনটি হোল্ড লাইনের কোথাও মেলে এবং সত্য: মিথ্যা।
- [ক্রিয়া] যেহেতু একটি ভুয়া অবস্থা ইতিমধ্যে বিদ্যমান, তাই কিছুই করবেন না।
- d) বর্তমান লাইনটি হোল্ড লাইনের কোথাও মেলে এবং মিথ্যা: সত্য।
- [অ্যাকশন] এটিতে কিছু কাজ জড়িত, এর মধ্যে আমাদের সত্য যেখানে অবস্থিত সেখানে ঠিক একই অবস্থানে ভুয়া রেখাটি প্রতিস্থাপন করতে হবে।
- ঙ) বর্তমান লাইন হোল্ড লাইনের কোথাও মেলে না।
- [ACTION] বর্তমান লাইনটি শেষের দিকে সরান।
ফলাফল
AA,false
BB,false
CC,false
DD,true
true
এটি রাখা যদি এটি প্রথম কলামের প্রথম উদাহরণ?