ToolDeck

সদৃশ লাইন অপসারণকারী

পাঠ্য থেকে সদৃশ লাইনগুলি সরান, শুধুমাত্র অনন্য লাইনগুলি রাখুন

একটি উদাহরণ চেষ্টা করুন

ইনপুট লাইন

অনন্য লাইন

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
অনন্য লাইনগুলি এখানে প্রদর্শিত হবে…

সদৃশ লাইন অপসারণ কী?

সদৃশ লাইন অপসারণ হলো একটি টেক্সট ব্লককে লাইন ধরে স্ক্যান করে প্রতিটি অনন্য লাইনের শুধুমাত্র প্রথম উপস্থিতি রাখার প্রক্রিয়া। অনলাইনে সদৃশ লাইন সরানোর সময়, টুলটি আপনার ইনপুটকে নিউলাইন ক্যারেক্টার দিয়ে ভাগ করে, হ্যাশ-ভিত্তিক ডেটা স্ট্রাকচার (যেমন Set) ব্যবহার করে কোন লাইনগুলি আগে এসেছে তা ট্র্যাক করে, এবং শুধুমাত্র যে লাইনগুলি আগে দেখা যায়নি সেগুলি আউটপুট করে। মূল লাইনের ক্রম বজায় থাকে।

দুটি লাইন তখনই সদৃশ বলে বিবেচিত হয় যখন সেগুলি প্রতিটি অক্ষরে হুবহু মিলে যায়। তবে, বাস্তব দুনিয়ার ডেটা কখনো সরাসরি মিলের উপযোগী হয় না। শুরু বা শেষের হোয়াইটস্পেস, অসামঞ্জস্যপূর্ণ ক্যাপিটালাইজেশন, এবং ট্যাব বা ক্যারেজ রিটার্নের মতো অদৃশ্য ক্যারেক্টার — এই সব কারণেই একই দেখতে লাইনগুলি আলাদা হিসেবে বিবেচিত হতে পারে। এই কারণেই বেশিরভাগ ডিডুপ্লিকেশন টুল তুলনার আগে কেস-ইনসেনসিটিভ তুলনা ও হোয়াইটস্পেস ট্রিমিংয়ের বিকল্প দেয়।

ডিডুপ্লিকেশন সাজানো থেকে আলাদা একটি অপারেশন। Unix কমান্ড sort -u একই সাথে সাজায় এবং ডিডুপ্লিকেট করে, যা লাইনের ক্রম পরিবর্তন করে। আপনি যদি লাইনের মূল ক্রম বজায় রাখতে চান, তাহলে seen-set পদ্ধতি দরকার: লাইনগুলি ক্রমানুসারে অতিক্রম করুন, প্রতিটি লাইনের নর্মালাইজড রূপ একটি সেটে যোগ করুন, এবং যে লাইনের কী ইতোমধ্যে বিদ্যমান তা বাদ দিন। এই টুল seen-set পদ্ধতি ব্যবহার করে, তাই আপনার প্রথম উপস্থিতিগুলি তাদের মূল অবস্থানে থাকে।

কেন এই সদৃশ অপসারণকারী ব্যবহার করবেন?

আপনার টেক্সট পেস্ট করুন, তুলনার বিকল্প বেছে নিন, এবং তাৎক্ষণিকভাবে ডিডুপ্লিকেটেড ফলাফল দেখুন। কোনো কমান্ড-লাইন সেটআপ নেই, কোনো regex লেখার দরকার নেই, কোনো ফাইল আপলোড নেই।

তাৎক্ষণিক ডিডুপ্লিকেশন
আপনি টাইপ বা পেস্ট করার সাথে সাথে ফলাফল আপডেট হয়। কেস সংবেদনশীলতা ও হোয়াইটস্পেস ট্রিমিং টগল করে দেখুন ভিন্ন বিকল্পগুলি কীভাবে আউটপুটকে প্রভাবিত করে, কিছু পুনরায় চালানো ছাড়াই।
🔒
গোপনীয়তা-সুরক্ষিত প্রক্রিয়াকরণ
সমস্ত ডিডুপ্লিকেশন JavaScript ব্যবহার করে আপনার ব্রাউজারে চলে। আপনার টেক্সট আপনার ডিভাইসে থাকে এবং কখনো কোনো সার্ভারে আপলোড বা লগ করা হয় না।
🎯
কাস্টম মিলের নিয়ম
কেস-ইনসেনসিটিভ মোড চালু করুন যাতে "Apple" ও "apple" একই লাইন হিসেবে বিবেচিত হয়। হোয়াইটস্পেস ট্রিমিং চালু করুন তুলনার সময় শুরু ও শেষের স্পেস উপেক্ষা করতে।
📋
কোনো অ্যাকাউন্ট প্রয়োজন নেই
পেজ খুলুন এবং ডিডুপ্লিকেশন শুরু করুন। কোনো নিবন্ধন নেই, কোনো ব্রাউজার এক্সটেনশন নেই, কোনো ডেস্কটপ ইনস্টলেশন নেই। যেকোনো আধুনিক ব্রাউজারযুক্ত ডিভাইসে কাজ করে।

সদৃশ লাইন অপসারণকারীর ব্যবহারের ক্ষেত্র

ফ্রন্টএন্ড ডেভেলপমেন্ট
CSS ক্লাস তালিকা পরিষ্কার করুন, বারবার আসা ইমপোর্ট স্টেটমেন্ট সরান, বা i18n অনুবাদ কী ডিডুপ্লিকেট করুন। কমিটের আগে সদৃশ সরালে বাড়তি বান্ডেল এড়ানো যায় এবং মার্জ দ্বন্দ্ব কমে।
ব্যাকএন্ড ইঞ্জিনিয়ারিং
শাখা মার্জের পর requirements.txt, Gemfile, বা package.json নির্ভরতা তালিকায় সদৃশ এন্ট্রি ডিডুপ্লিকেট করুন। অনুমতি-তালিকা, নিষেধ-তালিকা, বা রাউটিং টেবিল থেকে বারবার আসা এন্ট্রি সরান।
DevOps ও অবকাঠামো
.env ফাইল, হোস্ট তালিকা, বা Kubernetes ConfigMap থেকে সদৃশ এন্ট্রি পরিষ্কার করুন। সদৃশ পরিবেশ ভেরিয়েবল নীরব ওভাররাইড ঘটায়, তাই স্থাপনার আগে সেগুলি ধরা কঠিন-সনাক্তযোগ্য কনফিগারেশন বাগ এড়ায়।
QA ও টেস্ট অটোমেশন
টেস্ট রান ম্যানিফেস্ট থেকে বারবার আসা টেস্ট কেস আইডি বা জেনারেটেড টেস্ট সুইটে সদৃশ অ্যাসারশন সরান। লগ আউটপুট থেকে ত্রুটি বার্তা ডিডুপ্লিকেট করে ব্যর্থতার অনন্য সেট দেখুন।
ডেটা ইঞ্জিনিয়ারিং
CSV এক্সপোর্ট বা টেক্সট হিসেবে পেস্ট করা SQL কুয়েরি ফলাফল থেকে সদৃশ সারি মুছুন। ডেটাবেজ বা পাইপলাইনে আমদানির আগে ইমেইল তালিকা, ব্যবহারকারী আইডি তালিকা, বা ট্যাগ তালিকা পরিষ্কার করুন।
শিক্ষার্থী ও গবেষকরা
শব্দভান্ডার তালিকা, গ্রন্থপঞ্জি লাইন, বা অধ্যয়নের নোট থেকে বারবার আসা এন্ট্রি সরান। একাধিক উৎস থেকে বিষয়বস্তু পেস্ট করুন এবং স্প্রেডশিট অ্যাপ্লিকেশন ইনস্টল না করেই একটি পরিষ্কার, অনন্য তালিকা পান।

ডিডুপ্লিকেশন পদ্ধতির তুলনা

সদৃশ লাইন সরানোর বেশ কয়েকটি পদ্ধতি রয়েছে, প্রতিটির ক্রম সংরক্ষণ, মেমোরি ব্যবহার ও নির্ভুলতার ক্ষেত্রে ভিন্ন সুবিধা-অসুবিধা রয়েছে।

পদ্ধতিকীভাবে কাজ করেআউটপুটের ক্রমকোথায় ব্যবহৃত হয়
SetHash-based, O(1) lookupUnorderedJavaScript Set, Python set()
Sorted + scanSort then skip adjacentSorted outputUnix sort -u, C++ std::unique
Seen-set + listTrack seen, preserve orderOriginal orderThis tool, Python dict.fromkeys()
Bloom filterProbabilistic membershipMay miss someLarge-scale pipelines, Redis
SQL DISTINCTDatabase-level dedupQuery-dependentSELECT DISTINCT col FROM table

কেস সংবেদনশীলতা ও হোয়াইটস্পেস পরিচালনা

দুটি বিকল্প নির্ধারণ করে এই টুল কীভাবে সিদ্ধান্ত নেয় যে দুটি লাইন সদৃশ কিনা। প্রতিটি বিকল্প কখন ব্যবহার করতে হবে তা বোঝা মিথ্যা ধনাত্মক (ভিন্ন লাইনকে সদৃশ বলা) এবং মিথ্যা ঋণাত্মক (মিলে যাওয়া লাইন মিস করা) উভয়ই প্রতিরোধ করে।

কেস সংবেদনশীল (ডিফল্ট: চালু)
চালু থাকলে, "Apple" ও "apple" আলাদা লাইন হিসেবে বিবেচিত হয়। ব্যবহারকারীর দেওয়া ডেটা, ডোমেন নাম তালিকা, বা যেকোনো টেক্সট যেখানে ক্যাপিটালাইজেশন অসামঞ্জস্যপূর্ণ কিন্তু অর্থ একই — সেখানে ডিডুপ্লিকেট করতে এটি বন্ধ রাখুন।
হোয়াইটস্পেস ট্রিম (ডিফল্ট: চালু)
চালু থাকলে, তুলনার আগে শুরু ও শেষের স্পেস এবং ট্যাব মুছে দেওয়া হয়। এটি একই দেখতে কিন্তু অদৃশ্য ক্যারেক্টারে ভিন্ন লাইন ধরে, যা কপি-পেস্ট করা টার্মিনাল আউটপুট, ইন্ডেন্টেড কনফিগ ফাইল এবং এডিটর আর্টিফ্যাক্টে সাধারণ।

কোড উদাহরণ

JavaScript, Python, Go, এবং কমান্ড লাইনে প্রোগ্রামগতভাবে সদৃশ লাইন সরানোর পদ্ধতি। প্রতিটি উদাহরণ ক্রম-সংরক্ষণকারী ডিডুপ্লিকেশন দেখায় এবং কেস সংবেদনশীলতা পরিচালনা করে।

JavaScript
const text = `apple
banana
apple
Cherry
banana
cherry`

// Remove exact duplicates, preserve order
const unique = [...new Map(
  text.split('\n').map(line => [line, line])
).values()].join('\n')
// → "apple\nbanana\nCherry\ncherry"

// Case-insensitive deduplication
const seen = new Set()
const ciUnique = text.split('\n').filter(line => {
  const key = line.toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
// → "apple\nbanana\nCherry"

// Trim whitespace before comparing
const trimDedup = text.split('\n').filter(line => {
  const key = line.trim().toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
Python
text = """apple
banana
apple
Cherry
banana
cherry"""

lines = text.splitlines()

# Remove duplicates, preserve order (Python 3.7+)
unique = list(dict.fromkeys(lines))
# → ['apple', 'banana', 'Cherry', 'cherry']

# Case-insensitive deduplication
seen = set()
ci_unique = []
for line in lines:
    key = line.lower()
    if key not in seen:
        seen.add(key)
        ci_unique.append(line)
# → ['apple', 'banana', 'Cherry']

# With whitespace trimming
seen = set()
trimmed = []
for line in lines:
    key = line.strip().lower()
    if key not in seen:
        seen.add(key)
        trimmed.append(line)
Go
package main

import (
	"fmt"
	"strings"
)

func removeDuplicates(text string) string {
	lines := strings.Split(text, "\n")
	seen := make(map[string]bool)
	result := make([]string, 0, len(lines))

	for _, line := range lines {
		if !seen[line] {
			seen[line] = true
			result = append(result, line)
		}
	}
	return strings.Join(result, "\n")
}

func main() {
	text := "apple\nbanana\napple\ncherry\nbanana"
	fmt.Println(removeDuplicates(text))
	// → apple\nbanana\ncherry
}
CLI (bash)
# Remove duplicates (sorts output — does not preserve order)
sort -u file.txt

# Remove duplicates while preserving original order
awk '!seen[$0]++' file.txt

# Case-insensitive dedup, preserve order
awk 'BEGIN{IGNORECASE=1} !seen[tolower($0)]++' file.txt

# Trim whitespace then dedup
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt | awk '!seen[$0]++'

# Count duplicates before removing
sort file.txt | uniq -c | sort -rn

প্রায়শই জিজ্ঞাসিত প্রশ্ন

সদৃশ সরানো ও sort -u ব্যবহারের মধ্যে পার্থক্য কী?
sort -u কমান্ড প্রথমে সব লাইন বর্ণানুক্রমিকভাবে সাজায় এবং তারপর সন্নিহিত সদৃশগুলি সরায়। এটি মূল লাইনের ক্রম পরিবর্তন করে। seen-set পদ্ধতি, যা এই টুল ব্যবহার করে, ক্রমানুসারে লাইনগুলি অতিক্রম করে এবং যে লাইন ইতোমধ্যে দেখা গেছে তা বাদ দেয়, মূল ক্রম বজায় রেখে। sort -u ব্যবহার করুন যখন সাজানো ও অনন্য আউটপুট উভয়ই চান। ক্রম গুরুত্বপূর্ণ হলে seen-set পদ্ধতি ব্যবহার করুন।
সদৃশ সরানোর সময় কি আমার টেক্সট সার্ভারে পাঠানো হয়?
না। সমস্ত প্রক্রিয়াকরণ JavaScript ব্যবহার করে আপনার ব্রাউজারে হয়। টেক্সট কখনো আপনার ডিভাইস ছেড়ে যায় না। আপনার ব্রাউজারের DevTools Network ট্যাব খুলে যাচাই করতে পারেন যে টেক্সট পেস্ট করা ও বিকল্প টগল করার সময় কোনো অনুরোধ পাঠানো হচ্ছে না।
এই টুল কত লাইন পরিচালনা করতে পারে?
টুলটি দশ হাজার লাইনেও ভালো কাজ করে। JavaScript-এর Set-এর গড় O(1) লুকআপ সময় আছে, তাই ১,০০,০০০ লাইন ডিডুপ্লিকেট করতে আধুনিক হার্ডওয়্যারে ১০০ মিলিসেকেন্ডের কম লাগে। কয়েক মেগাবাইটের বড় ফাইলের জন্য কমান্ড লাইনে awk '!seen[$0]++' ওয়ান-লাইনার ব্যবহার করুন, যা ফাইল পুরোপুরি মেমোরিতে না নিয়েই স্ট্রিম করে।
কেস-ইনসেনসিটিভ ডিডুপ্লিকেশন কীভাবে কাজ করে?
কেস সংবেদনশীলতা বন্ধ থাকলে, দেখা-লাইনের সেটে পরীক্ষার আগে প্রতিটি লাইনকে ছোট হাতে রূপান্তর করা হয়। প্রথম উপস্থিতির মূল কেস-সহ সংস্করণ আউটপুটে রাখা হয়। তাই আপনার ইনপুটে যদি ১ নম্বর লাইনে "Apple" এবং ৫ নম্বর লাইনে "apple" থাকে, তাহলে "Apple" রাখা হয় এবং "apple" সরানো হয়।
আমি কি একই সাথে সদৃশ সরাতে ও সাজাতে পারি?
এই টুল লাইনের ক্রম না বদলে সদৃশ সরায়। সাজানো ও অনন্য আউটপুট পেতে, প্রথমে একই বিভাগের লাইন সর্টার টুল ব্যবহার করে আপনার টেক্সট সাজান, তারপর সাজানো ফলাফল এখানে পেস্ট করুন বাকি সদৃশ সরাতে। বিকল্পভাবে, এক ধাপে সমাধানের জন্য কমান্ড লাইনে sort -u ব্যবহার করুন।
খালি লাইন ও শুধু হোয়াইটস্পেস-যুক্ত লাইনের কী হয়?
খালি লাইনগুলি অন্য যেকোনো লাইনের মতো বিবেচিত হয়। আপনার টেক্সটে তিনটি খালি লাইন থাকলে শুধু প্রথমটি রাখা হয়। হোয়াইটস্পেস ট্রিমিং চালু থাকলে, শুধু স্পেস বা ট্যাব-যুক্ত লাইনগুলি তুলনার আগে খালি স্ট্রিংয়ে রূপান্তরিত হয়, তাই সেগুলি সব প্রথম খালি বা হোয়াইটস্পেস-মাত্র লাইনের সদৃশ হিসেবে বিবেচিত হয়।
আমি কীভাবে CSV ফাইল থেকে নির্দিষ্ট কলাম অনুযায়ী সদৃশ সরাতে পারি?
এই টুল পুরো লাইন তুলনা করে, পৃথক কলাম নয়। নির্দিষ্ট কলাম অনুযায়ী CSV ডিডুপ্লিকেট করতে awk-এ ফিল্ড সেপারেটর ব্যবহার করুন: awk -F',' '!seen[$2]++' file.csv দ্বিতীয় কলামে সদৃশ মানযুক্ত সারি সরায়। Python-এ pandas ব্যবহার করুন: df.drop_duplicates(subset=['column_name'])। SQL ডেটার জন্য লক্ষ্য কলামে SELECT DISTINCT বা GROUP BY ব্যবহার করুন।