Skip to content
লাইন টুল
Tools

লাইন টুল

নতুন

ডুপ্লিকেট লাইন মুছুন, সাজান, ট্রিম, উল্টে দিন, এলোমেলো করুন ও টেক্সট লাইন নম্বর দিন।

Clean & order
Duplicates
Keep
Sort & case
Filter lines
Add to each line
0 Total lines
0 Unique
0 Blank
0 Duplicates removed
0 lines
0 lines

Runs entirely in your browser. Nothing is uploaded.

একটি অনলাইন টুলে প্রতিটি লাইন অপারেশন

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

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

ডুপ্লিকেট লাইন সরান — প্রথমটি বা শেষেরটি রাখুন

প্রধান বৈশিষ্ট্যটি হলো যা বেশিরভাগ মানুষ খোঁজে: ডুপ্লিকেট লাইন সরানো। এটি চালু করুন আর পুনরাবৃত্ত লাইনগুলো একটি একক কপিতে গুটিয়ে যায়। প্রথম সংঘটন রাখবেন (ডিফল্ট) নাকি শেষেরটি বেছে নিন, আর ignore case চালু করুন যাতে Apple এবং apple একই লাইন হিসেবে গণ্য হয়।

শুধু স্ট্রে স্পেসের কারণে ভিন্ন হওয়া কাছাকাছি-ডুপ্লিকেট ধরতে trim each line-এর সাথে যুক্ত করুন। লাইভ স্ট্যাটস দেখায় ঠিক কতগুলো ডুপ্লিকেট সরানো হয়েছে, আর একটি "Use as input" বাটন আপনাকে দ্বিতীয় পাসের জন্য ফলাফল আবার ইনপুট হিসেবে দিতে দেয়। এটি Notepad++ বা Excel চালু না করেই টেক্সট ডিডুপ করার দ্রুততম উপায় — উভয়ের জন্যই অতিরিক্ত ধাপ এবং ডেস্কটপ ইনস্টল প্রয়োজন যা এই টুল সম্পূর্ণভাবে এড়িয়ে যায়।

লাইন বর্ণানুক্রমে, সংখ্যাগতভাবে বা দৈর্ঘ্য অনুযায়ী সর্ট করুন

লাইন সর্টার প্রতিটি সাধারণ অর্ডার সামলায়: A → Z এবং Z → A লাইন বর্ণানুক্রমে সর্ট করতে, numeric প্রতিটি লাইনের প্রথম সংখ্যা অনুযায়ী সাজাতে (তাই 2, 10, 1 হয়ে যায় 1, 2, 10, ভাঙা টেক্সট অর্ডার 1, 10, 2 নয়), এবং by length লাইনগুলোকে ছোট-থেকে-বড় সাজাতে। একটি ignore case টগল বড় ও ছোট হাতের এন্ট্রিগুলোকে একসাথে রাখে।

সর্টের বিপরীত দরকার? Reverse পুরো তালিকা শেষ-থেকে-শুরুতে উল্টে দেয়, আর shuffle Fisher–Yates শাফল দিয়ে র‍্যান্ডমাইজ করে ড্র, কুইজ এবং প্লেলিস্টের জন্য। Notepad++ বা Excel-এ সর্টিংয়ের বিপরীতে, আউটপুট প্লেইন টেক্সট থেকে যায় কোনো রিফরম্যাটিং বা কলাম রূপান্তর ছাড়াই — শুধু আপনার চাওয়া অর্ডারে লাইন।

TextMechanic, DupliChecker এবং Notepad++-এর সাথে তুলনা

TextMechanic.com একাধিক পেজে লাইন অপারেশন ভাগ করে দেয় — ডিডুপ করতে একটি URL-এ যান, সর্ট করতে আরেকটিতে, খালি লাইন সরাতে আরেকটিতে। প্রতিটি অপারেশন একটি পেজ রিলোড, আর কাজের মধ্যে আপনার সেটিংস হারিয়ে যায়। DupliChecker-এর remove-duplicate-lines টুল একবারে একটি কাজ সামলায় কোনো লাইভ প্রিভিউ ছাড়া; আপনি পেস্ট করেন, একটি বাটন ক্লিক করেন, এবং অপেক্ষা করেন। কোনো টুলই ডিডুপ্লিকেশন, সর্টিং, ট্রিমিং এবং শাফলিংকে একটি লাইভ ইন্টারফেসে একত্রিত করে না যেখানে অপশনগুলো আউটপুট তাৎক্ষণিকভাবে আপডেট করে।

TextFX প্লাগইনসহ Notepad++ শক্তিশালী কিন্তু একটি ডেস্কটপ ইনস্টল প্রয়োজন, আর প্লাগইনটি ডিফল্টভাবে বান্ডল করা নেই — এটি Mac বা Linux-এও কাজ করে না। VS Code-এর জন্য Sort Lines এক্সটেনশন দরকার। Excel-এর Data → Remove Duplicates আপনার টেক্সটকে একটি স্প্রেডশিট টেবিলে রূপান্তর করে। এই ব্রাউজার টুল এসবের সবকিছু করে কোনো ইনস্টল, এক্সটেনশন, বা রিফরম্যাটিং ছাড়া — পেস্ট করুন, কনফিগার করুন, কপি করুন। এটি Windows, Mac, Linux, আইফোন এবং অ্যান্ড্রয়েডে অভিন্নভাবে কাজ করে।

লাইন পরিষ্কার, ফিল্টার এবং রিফরম্যাট করুন

অর্ডারিংয়ের বাইরেও, টুলকিটটি টেক্সট পরিষ্কার এবং পুনর্গঠন করে। Trim each line শুরু ও শেষের হোয়াইটস্পেস সরায়, remove blank lines খালি সারি মুছে দেয়, এবং filter আপনাকে একটি শব্দ — বা একটি সম্পূর্ণ regular expression — মিলে যাওয়া লাইনগুলো রাখতে বা সরাতে দেয়, ঐচ্ছিক কেস-ইনসেনসিটিভিটিসহ।

রিফরম্যাট করতে, প্রতিটি লাইনে একটি প্রিফিক্স বা সাফিক্স যোগ করুন (কোট, কমা, বা HTML ট্যাগে আইটেম মোড়ানোর জন্য উপকারী) এবং number lines চালু করুন একটি পরিষ্কার, সারিবদ্ধ কাউন্টার প্রিপেন্ড করতে। অপারেশনগুলো একটি নির্দিষ্ট, প্রেডিক্টেবল ক্রমে প্রয়োগ হয় তাই একই সেটিংস সবসময় একই ফলাফল তৈরি করে — একটি ভিন্ন তালিকা নিয়ে টুলে ফিরে এলে কোনো বিস্ময় নেই।

প্রাইভেট, তাৎক্ষণিক, এবং ফ্রি — যেকোনো ডিভাইসে কাজ করে

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

টুলটি Windows, Mac, Linux, ChromeOS, আইফোন এবং অ্যান্ড্রয়েডে একইভাবে কাজ করে — জাভাস্ক্রিপ্ট চালায় এমন যেকোনো ব্রাউজার। এই লাইন টুলগুলো বুকমার্ক করুন এবং পরের বার যখন আপনার লাইন সর্ট করতে, খালি লাইন মুছতে, বা একটি তালিকা ডিডুপ করতে দরকার হবে, কোনো ডেস্কটপ অ্যাপ্লিকেশন খোলা বা প্লাগইন শেখা ছাড়াই সেকেন্ডে করে ফেলুন।

Unix পাইপ-অ্যান্ড-ফিল্টার মডেল: লাইন হলো সার্বজনীন মুদ্রা

টেক্সট লাইন যে ডেটা প্রসেসিংয়ের মৌলিক একক তার ধারণাটি Ken Thompson এবং Dennis Ritchie-এর Unix-এ ফিরে যায়, যা Bell Labs-এ ১৯৬৯ থেকে ১৯৭৩ সালের মধ্যে তৈরি হয়েছিল। তাদের অন্তর্দৃষ্টি — কখনও কখনও "everything is text" দর্শন বলা হয় — ছিল প্রোগ্রামগুলো স্ট্যান্ডার্ড ইনপুট থেকে লাইন পড়বে, রূপান্তর করবে, এবং স্ট্যান্ডার্ড আউটপুটে লাইন লিখবে। এটি প্রোগ্রামগুলোকে সংযোজনযোগ্য করেছিল: পাইপ অপারেটর (|) দিয়ে সেগুলো সংযুক্ত করুন আর একটির আউটপুট পরেরটির ইনপুট হয়ে যায়।

প্রায় প্রতিটি Unix টেক্সটবুকে দেখা যায় এমন ক্লাসিক উদাহরণ একটি লগ ফাইলে সবচেয়ে সাধারণ এরর মেসেজ গোনে: cat file.txt | grep "error" | sort | uniq -c | sort -rn | head -20। চারটি ছোট টুল কাজ করে — grep একটি প্যাটার্নের সাথে মিলে যাওয়া লাইন ফিল্টার করে, sort সেগুলো সাজায়, uniq -c পরপর একই লাইনগুলোকে একটি গণনায় গুটিয়ে ফেলে, আর দ্বিতীয় sort -rn সবচেয়ে ঘন ঘন আসা এরর আগে রাখে। কোনো একক টুল বেশি কিছু করে না; পাইপলাইনটাই সব করে। এই সংযোজনযোগ্যতাই এই ব্রাউজার টুল সেইসব ইউজারদের জন্য নিয়ে আসে যাদের হাতে টার্মিনাল নেই: একই অপারেশন (ফিল্টার, সর্ট, ডিডুপ্লিকেট) একটি ইন্টারফেসে স্ট্যাক করা।

চারটি মৌলিক Unix টেক্সট টুল প্রতিটি লাইনকে তাদের কাজের একক হিসেবে চালায়। grep (Global Regular Expression Print) শুধু একটি প্যাটার্নের সাথে মিলে যাওয়া লাইন আউটপুট দেয়। sort লাইনগুলোকে অভিধানিকভাবে বা সংখ্যাগতভাবে পুনর্বিন্যাস করে। uniq পরপর একই লাইন গুটিয়ে ফেলে — গুরুত্বপূর্ণভাবে, এটি শুধু পাশাপাশি থাকা লাইনগুলো ডিডুপ্লিকেট করে, যে কারণে sort | uniq পাইপলাইনে সবসময় একসাথে দেখা যায়। awk প্রতিটি লাইনকে হোয়াইটস্পেস-বিভক্ত ফিল্ডসহ একটি রেকর্ড হিসেবে গণ্য করে, কলাম নিষ্কাশনের জন্য আদর্শ করে তোলে। এই টুলগুলো বোঝা স্পষ্ট করে কেন লাইন-লেভেল অপারেশন এত শক্তিশালী: প্রায় প্রতিটি স্ট্রাকচার্ড ডেটা ফরম্যাট — CSV, TSV, লগ ফাইল, কনফিগ ফাইল, কীওয়ার্ড তালিকা — শেষ পর্যন্ত লাইনের একটি ক্রম।

সর্টিং অ্যালগরিদম: কেন অ্যালগরিদমের পছন্দ বাস্তব ফলাফল বদলে দেয়

সব সর্ট ইমপ্লিমেন্টেশন একইভাবে আচরণ করে না, এবং বড় তালিকা বা বিদ্যমান স্ট্রাকচারসহ ডেটা সর্ট করার সময় পার্থক্যগুলো বোঝা গুরুত্বপূর্ণ। Bubble sort (O(n²) সময়) সংলগ্ন এলিমেন্ট তুলনা করে বারবার সোয়াপ করে — ব্যাখ্যা করা সহজ কিন্তু প্রোডাকশনে প্রায় কখনও ব্যবহৃত হয় না কারণ বড় ইনপুটে এটি ভয়াবহভাবে ধীর। Insertion sort-ও ওয়ার্স্ট কেসে O(n²) কিন্তু সুন্দরভাবে ক্ষয় হয়: প্রায়-সর্টেড ডেটায় O(n) সময়ে চলে, যে কারণে এটি ছোট সাব-অ্যারের জন্য হাইব্রিড অ্যালগরিদমের ভেতরে বেস কেস হিসেবে দেখা যায়।

Merge sort সব ক্ষেত্রেই O(n log n) সময়ে চলে এবং স্টেবল — সমান এলিমেন্টগুলো তাদের মূল আপেক্ষিক অর্ডার ধরে রাখে। Python-এর বিল্ট-ইন sort() এবং অবজেক্টের জন্য Java-এর Arrays.sort() উভয়ই এই কারণে merge sort-কে ভিত্তি হিসেবে ব্যবহার করে। Quicksort-ও গড়ে O(n log n) কিন্তু ইতিমধ্যে-সর্টেড বা বিপরীত-সর্টেড ইনপুটে O(n²)-এ ক্ষয় হয় যদি না median-of-three-এর মতো একটি পিভট স্ট্র্যাটেজি ব্যবহার করা হয়। এর সুবিধা হলো এটি চমৎকার ক্যাশ লোকালিটিসহ ইন-প্লেস সর্ট করে, যে কারণে C-এর qsort() ডিফল্টভাবে এটি ব্যবহার করে। Timsort, ২০০২ সালে Tim Peters উদ্ভাবিত এবং এখন Python, Java 7+, এবং V8 জাভাস্ক্রিপ্ট ইঞ্জিনে (যা Chrome-এ এই টুল চালায়) ব্যবহৃত, একটি হাইব্রিড যা ইতিমধ্যে-সাজানো ডেটার রান insertion sort দিয়ে মার্জ করে তারপর সেই রানগুলো মার্জ করে — এটি বাস্তব-বিশ্বের ডেটায় প্রায় সবসময় থাকা স্বাভাবিক আংশিক অর্ডারিং কাজে লাগায়, আংশিকভাবে সাজানো তালিকায় ব্যতিক্রমীভাবে দ্রুত করে তোলে।

Radix sort সংখ্যাকে ডিজিট-বাই-ডিজিট সাজিয়ে O(n log n) তুলনা-ভিত্তিক নিম্ন সীমা সম্পূর্ণভাবে এড়িয়ে যায়, O(nk) সময় অর্জন করে যেখানে k হলো ডিজিটের সংখ্যা। এটি নির্দিষ্ট-দৈর্ঘ্যের সংখ্যা বা স্ট্রিংয়ের বড় তালিকা সর্ট করার জন্য পছন্দের অ্যালগরিদম। দৈনন্দিন টেক্সটের জন্য — কীওয়ার্ড তালিকা, নাম, লগ লাইন — একটি স্টেবল তুলনা সর্ট যেমন Timsort ব্যবহারিক অপ্টিমাম, যে কারণে এই টুলের সর্ট Python বা আধুনিক জাভাস্ক্রিপ্ট রানটাইম থেকে আপনার প্রত্যাশিত একই প্রেডিক্টেবল, স্টেবল আউটপুট তৈরি করে।

ডিডুপ্লিকেশন স্ট্র্যাটেজি: এক্সাক্ট ম্যাচ থেকে নিয়ার-ডুপ্লিকেট ডিটেকশন পর্যন্ত

এক্সাক্ট ডিডুপ্লিকেশন — শুধু একটি অভিন্ন স্ট্রিংয়ের একটি কপি রাখা — সবচেয়ে সরল স্ট্র্যাটেজি এবং এই টুল যেটি ইমপ্লিমেন্ট করে। অ্যালগরিদমিক ভিত্তিটি হলো সেট থিওরি: একটি তালিকার ইউনিক এলিমেন্টগুলো ঠিক এর সেট, আর একটি হ্যাশ সেটে n এলিমেন্ট ইনসার্ট করা গড়ে O(n) সময়ে চলে। এই কারণেই হ্যাশ-ভিত্তিক ডিডুপ্লিকেশন লক্ষ লক্ষ লাইনে ধীর না হয়ে স্কেল করে: প্রতিটি লাইন একবার হ্যাশ করা হয়, হ্যাশটি দেখা হ্যাশগুলোর বিরুদ্ধে চেক করা হয়, এবং ডুপ্লিকেট বাতিল করা হয়। Unix-এর sort | uniq পাইপলাইন একটি ভিন্ন পদ্ধতি নেয় — এটি প্রথমে সর্ট করে (O(n log n)) তারপর একটি লিনিয়ার পাসে সংলগ্ন একই লাইন সরায় (O(n)), একটি হ্যাশ টেবিল প্রয়োজন না হওয়া একটি সহজতর ইমপ্লিমেন্টেশনের জন্য অতিরিক্ত সময় ট্রেড করে।

এক্সাক্ট ম্যাচিংয়ের বাইরে নিয়ার-ডুপ্লিকেট ডিটেকশন রয়েছে, যা সার্চ ইঞ্জিনগুলো এমন পেজ চিহ্নিত করার পদ্ধতি যা বেশিরভাগ একই কিন্তু শব্দ-বাই-শব্দ অভিন্ন নয়। Jaccard similarity দুটি n-gram সেটের মধ্যে ওভারল্যাপ পরিমাপ করে: দুটি ডকুমেন্ট নিয়ার-ডুপ্লিকেট যদি তাদের Jaccard স্কোর একটি থ্রেশহোল্ড (সাধারণত ০.৮) ছাড়িয়ে যায়। MinHash প্রতিটি ডকুমেন্টকে একটি ছোট সিগনেচারে হ্যাশ করে বিলিয়ন জোড়া জুড়ে Jaccard similarity আনুমানিক করে যা সাদৃশ্য সংরক্ষণ করে — এটি Google-এর Simhash এবং অনেক কনটেন্ট-ডিডুপ্লিকেশন সিস্টেমের পিছনের প্রযুক্তি। দৈনন্দিন তালিকা পরিষ্কার করার জন্য, কেস-ইনসেনসিটিভ এবং হোয়াইটস্পেস-ট্রিম করা তুলনাসহ এক্সাক্ট ডিডুপ্লিকেশন বেশিরভাগ বাস্তব-বিশ্বের ক্ষেত্র কভার করে।

ডেটা ইঞ্জিনিয়ারিং এবং ETL পাইপলাইনে, ডিডুপ্লিকেশন সামগ্রিকভাবে মোট প্রসেসিং কাজের ১৫–৪০% জুড়ে থাকে। একটি ডাটাবেস এটি SELECT DISTINCT বা GROUP BY-এর মাধ্যমে সামলায়, যা কোয়েরি প্ল্যানার হ্যাশ অ্যাগ্রিগেশন বা সর্ট-মার্জ অ্যাগ্রিগেশন দিয়ে ইমপ্লিমেন্ট করে — উপরের একই দুই অ্যালগরিদমিক পরিবার। ফাইল-সিস্টেম স্তরে, ZFS এবং Btrfs ব্লক-লেভেল ডিডুপ্লিকেশন করে, প্রতিটি ইউনিক ব্লক একবার সংরক্ষণ করে সেটি কতগুলো ফাইল রেফারেন্স করে তা নির্বিশেষে, যা ক্লাউড স্টোরেজ প্রোভাইডার এবং ব্যাকআপ সফটওয়্যার (যেমন Borg Backup এবং Restic) নাটকীয় স্পেস সাশ্রয় অর্জন করার পদ্ধতি। একই নীতি টেক্সটে প্রযোজ্য: একটি কীওয়ার্ড তালিকা, মেইলিং তালিকা, বা লগ এক্সপোর্টে প্রায় সবসময় মোট লাইনের চেয়ে অনেক কম ইউনিক লাইন থাকে, আর ইমপোর্টের আগে ডিডুপ্লিকেট করা ডাউনস্ট্রিমে ইন্টেগ্রিটি সমস্যা প্রতিরোধ করে।

টেক্সট নরমালাইজেশন: সবকিছুর আগে যে ধাপটি ঘটে

টেক্সট নরমালাইজেশন হলো কাঁচা ইনপুটকে একটি ক্যানোনিকাল রূপে রূপান্তর করার প্রক্রিয়া যাতে তুলনা এবং অপারেশন সঙ্গতিপূর্ণভাবে আচরণ করে। সবচেয়ে সাধারণ নরমালাইজেশন হলো হোয়াইটস্পেস ট্রিমিং — প্রতিটি লাইনের শুরু ও শেষের স্পেস ও ট্যাব সরানো। এটিই ব্যর্থ ডিডুপ্লিকেশনের সবচেয়ে সাধারণ কারণও: "apple" এবং " apple " কাঁচা স্ট্রিং হিসেবে সমান নয়, কিন্তু তারা একই ডেটা প্রতিনিধিত্ব করে। জাভাস্ক্রিপ্টের trim(), Python-এর str.strip(), এবং Unix-এর sed 's/^ *//;s/ *$//' সবই বিদ্যমান কারণ এই সমস্যাটি সার্বজনীন। এই টুল ডিডুপ্লিকেশন ও সর্টিংয়ের আগে ট্রিমিং প্রয়োগ করে যাতে শুধু হোয়াইটস্পেসে ভিন্ন কাছাকাছি-অভিন্ন লাইনগুলো প্রত্যাশামতো গুটিয়ে যায়।

কেস নরমালাইজেশন — কেস-ইনসেনসিটিভ তুলনার জন্য ছোট হাতে রূপান্তর — দ্বিতীয় সবচেয়ে সাধারণ অপারেশন। এটি তুচ্ছ মনে হয় কিন্তু একটি সুপরিচিত ফাঁদ আছে: জাভাস্ক্রিপ্টের toLowerCase() এবং Python-এর str.lower() কিছু অক্ষরের জন্য লোকেল-সচেতন। তুর্কি ভাষায়, বড় হাতের I ছোট হাতে হয় ı (ডটবিহীন i), i নয়। এর মানে একটি সরল toLowerCase() তুর্কি লোকেলে কেস-ইনসেনসিটিভ ম্যাচিং ভেঙে দিতে পারে। ইংরেজি এবং বেশিরভাগ ল্যাটিন-স্ক্রিপ্ট ভাষার জন্য সমস্যাটি ওঠে না, কিন্তু বহুভাষিক কনটেন্ট প্রসেস করা ডেটা পাইপলাইন তৈরি করার সময় এটি জানা মূল্যবান। এই টুলের ignore-case মোড এমন প্রান্তিক ক্ষেত্রগুলো সঠিকভাবে সামলাতে লোকেল-সচেতন তুলনা ব্যবহার করে।

লাইন এন্ডিং নরমালাইজেশন ডেটা কোয়ালিটি বাগের আরেকটি লুকানো উৎস। Windows ফাইল CRLF (\r\n) লাইন এন্ডিং ব্যবহার করে; Unix এবং macOS শুধু LF (\n) ব্যবহার করে। একটি Windows-তৈরি ফাইল যখন এমন একটি টুলে পেস্ট করা হয় যা ক্যারেজ-রিটার্ন (\r) সরায় না, প্রতিটি লাইন একটি অদৃশ্য অক্ষর বহন করে যা ডিডুপ্লিকেশন ভেঙে দেয় — "apple\r" এবং "apple" একই স্ট্রিং নয়। Unix কমান্ড dos2unix (বা sed 's/\r//') ক্যারেজ রিটার্ন সরায়; এই টুল পেস্ট করার সময় স্বয়ংক্রিয়ভাবে লাইন এন্ডিং নরমালাইজ করে যাতে অদৃশ্য অক্ষরটি কখনও ম্যাচিংয়ে হস্তক্ষেপ না করে। একসাথে, ট্রিম + কেস-ফোল্ড + লাইন-এন্ডিং নরমালাইজেশন বাস্তব-বিশ্বের একটি তালিকা সর্ট বা ডিডুপ্লিকেট করার আগে প্রয়োজনীয় বেশিরভাগ ডেটা পরিষ্কারের কাজ কভার করে।

Frequently asked questions

আমি কীভাবে টেক্সট থেকে ডুপ্লিকেট লাইন সরাব?

আপনার তালিকা পেস্ট করুন, "Remove duplicates" চালু করুন, আর একই লাইনগুলো একটি সংঘটনে গুটিয়ে যায় — প্রথমটি ডিফল্টভাবে রাখা হয়। উদাহরণস্বরূপ, apple / banana / apple / cherry চারটি লাইন হয়ে যায় apple / banana / cherry। "Trim each line"-ও চালু করুন যাতে শুধু ট্রেইলিং স্পেসে ভিন্ন লাইনও একই হিসেবে গণ্য হয়। TextMechanic.com-এর মতো টুল ডিডুপ্লিকেশন সামলায়, কিন্তু প্রতিটি অপারেশনের জন্য আলাদা পেজ লোড দরকার। এখানে সবকিছু একটি ভিউতে লাইভ আপডেট হয় কোনো রিলোড বা অ্যাকাউন্ট ছাড়াই।

আমি কীভাবে লাইন বর্ণানুক্রমে সর্ট করব?

Sort মেনু খুলুন এবং A → Z (ascending) বা Z → A (descending) বেছে নিন — banana / apple / cherry সঙ্গে সঙ্গে হয়ে যায় apple / banana / cherry। ডিফল্টভাবে সর্টিং কেস-সেনসিটিভ, তাই বড় হাতের অক্ষর ছোট হাতেরটির আগে সর্ট হয়। "Ignore case" টিক দিন যাতে Apple এবং apple স্বাভাবিকভাবে একসাথে থাকে। Excel-এ সর্টিংয়ের বিপরীতে, আপনার টেক্সট কোনো টেবিল রূপান্তর ছাড়াই প্লেইন টেক্সট থেকে যায়। সর্টটি ডিডুপ্লিকেশন এবং ট্রিমিংয়ের সাথে একটি পাসে মিলে যায়, যা একাধিক কপি-পেস্ট ধাপ সাশ্রয় করে।

আমি কীভাবে খালি বা ফাঁকা লাইন সরাব?

"Remove blank lines" চালু করুন আর প্রতিটি খালি লাইন — শুধু স্পেস বা ট্যাব থাকা লাইনসহ — সরানো হয়। কিছু লাইন খালি দেখালেও অদৃশ্য হোয়াইটস্পেস ধরে থাকলে প্রথমে "Trim each line"-এর সাথে যুক্ত করুন। আপনার ইনপুট লাইন সংখ্যা এবং আউটপুট সংখ্যা লাইভ আপডেট হয় যাতে ঠিক কতগুলো সরানো হয়েছে তা দেখতে পারেন। DupliChecker-এর লাইন টুল একই কাজ করে, কিন্তু প্রতিটি অপারেশনে পেজ রিলোড হয় এবং আপনি আপনার সেটিংস হারান। এখানে ফলাফল আপনি টাইপ করার সাথে সাথে আপডেট হয়, এবং একাধিক এডিট জুড়ে সব অপশন সক্রিয় থাকে।

আমি কীভাবে লাইনের ক্রম উল্টাব?

"Reverse order" চালু করুন আর পুরো তালিকা উপর-থেকে-নিচে উল্টে যায় — শেষ লাইনটি প্রথম হয়ে যায়, আর লাইনগুলো নিজে অপরিবর্তিত থাকে। এটি সবচেয়ে-নতুন-আগে একটি লগকে সবচেয়ে-পুরনো-আগে অর্ডারে রাখতে, বা আবার টাইপ না করে একটি সর্ট আনডু করতে উপকারী। আপনি এটিকে অন্য অপারেশনের সাথে স্ট্যাক করতে পারেন: প্রথমে ডিডুপ করুন, A→Z সর্ট করুন, তারপর একাধিক টুল ভিজিট না করেই এক ধাপে একটি ডিডুপ্লিকেটেড Z→A তালিকা পেতে উল্টান। অপারেশনটি নন-ডেস্ট্রাক্টিভ — বন্ধ করলে সঙ্গে সঙ্গে আগের অর্ডার ফিরে আসে।

আমি কীভাবে টেক্সটে লাইন নম্বর যোগ করব?

"Number lines" চালু করুন আর প্রতিটি লাইনের আগে তার অবস্থান এবং একটি ডট যোগ হয় — 1. apple, 2. banana, 3. cherry। সংখ্যাগুলো ডান-প্যাডেড থাকে যাতে ১০-লাইন বা ১০০-লাইনের তালিকা পরিষ্কারভাবে সারিবদ্ধ থাকে। নাম্বারিং সর্টিং এবং ফিল্টারিংয়ের পরে শেষে চলে, তাই সংখ্যাগুলো সবসময় চূড়ান্ত অর্ডার প্রতিফলিত করে। এটি ম্যানুয়াল গণনা ছাড়াই নম্বরযুক্ত চেকলিস্ট, র‍্যাঙ্কড তালিকা, বা বিবলিওগ্রাফি এন্ট্রি তৈরি করতে উপকারী, এবং আপনি তালিকা পুনর্বিন্যাস বা ফিল্টার করলেই সংখ্যাগুলো স্বয়ংক্রিয়ভাবে আপডেট হয়।

Notepad++, VS Code, বা Excel-এ আমি কীভাবে ডুপ্লিকেট লাইন সরাব?

Notepad++-এ, আপনার TextFX প্লাগইন দরকার — TextFX → TextFX Tools → Sort lines case insensitive (remove duplicates)-এ যান। VS Code-এর জন্য Sort Lines এক্সটেনশন দরকার, তারপর কমান্ড প্যালেট থেকে Sort Unique Lines। Excel-এর Data → Remove Duplicates আপনার টেক্সটকে একটি টেবিলে রূপান্তর করে, যা আনডু করা কঠিন। তিনটি পদ্ধতিরই সফটওয়্যার ইনস্টল বা প্লাগইন দরকার যা Mac, Linux, বা মোবাইলে থাকে না। এই ব্রাউজার টুল এসব এড়িয়ে যায়: পেস্ট করুন, "Remove duplicates" টিক দিন, কপি করুন — যেকোনো ডিভাইসে কোনো ইনস্টল ছাড়াই সম্পন্ন।

আমি কীভাবে লাইন সংখ্যাগতভাবে বা দৈর্ঘ্য অনুযায়ী সর্ট করব?

প্রতিটি লাইনে পাওয়া প্রথম সংখ্যা অনুযায়ী সর্ট করতে "Numeric ↑/↓" বেছে নিন, তাই 2, 10, 1 হয়ে যায় 1, 2, 10, ভুল টেক্সট অর্ডার 1, 10, 2 না হয়ে। ছোট-থেকে-বড় (বা উল্টো) লাইন সাজাতে "Length ↑/↓" বেছে নিন। একটি সংখ্যাবিহীন লাইন একটি সংখ্যাগত সর্টের শেষে পড়ে। এটি ভার্সন নম্বর, র‍্যাঙ্কড আইটেম, বা ডেটা এক্সপোর্ট সর্ট করার জন্য বিশেষভাবে উপকারী যেখানে সংখ্যাগত অর্ডার বর্ণানুক্রমিক অর্ডার থেকে আলাদা — স্প্রেডশিটে একটি সাধারণ হতাশা যাদের একটি নিবেদিত সংখ্যাগত টেক্সট সর্ট নেই।

আমি কীভাবে কেস উপেক্ষা করে ডুপ্লিকেট সরাব?

"Remove duplicates" চালু করুন, তারপর এর "Ignore case" অপশন টিক দিন। এখন Email, EMAIL, এবং email সবই একই লাইন হিসেবে গণ্য হয় আর শুধু একটি রাখা হয়। সেই অপশন ছাড়া কেসিং ঠিক মিলতে হয়, তাই সেই তিনটি আলাদা লাইন হিসেবে টিকে থাকবে। এটি সবচেয়ে গুরুত্বপূর্ণ ইমেইল তালিকা, ডোমেইন নাম, বা কীওয়ার্ড তালিকা ডিডুপ্লিকেট করার সময় যেখানে একই শব্দ ভিন্ন এক্সপোর্ট ফরম্যাট বা ডেটা সোর্স থেকে মিশ্র কেসে আসে। ignore-case অপশনটি ডিডুপ্লিকেশন এবং বর্ণানুক্রমিক সর্ট উভয়েই একসাথে প্রযোজ্য।

আমি কীভাবে লাইন শাফল বা র‍্যান্ডমাইজ করব?

প্রতিটি লাইনকে একটি Fisher–Yates শাফল দিয়ে র‍্যান্ডমলি পুনর্বিন্যাস করতে "Shuffle" চালু করুন, প্রতিটি লাইনকে যেকোনো অবস্থানে পড়ার সমান পরিসংখ্যানগত সুযোগ দিয়ে। এটি একটি পুরস্কার ড্রয়ের জন্য নামের তালিকা এলোমেলো করতে, একটি কুইজ প্রশ্নের অর্ডার, বা একটি প্লেলিস্টের জন্য উপকারী। একটি নতুন র‍্যান্ডম সিড দিয়ে আবার শাফল করতে টগল বন্ধ করে আবার চালু করুন। বেশিরভাগ অনলাইন টেক্সট টুলে শাফল ফিচার থাকে না — সাধারণত আপনার একটি স্প্রেডশিট RAND() ফর্মুলা, একটি স্ক্রিপ্ট, বা সম্পূর্ণ আরেকটি টুল দরকার হবে। এখানে এটি ডিডুপ্লিকেশন এবং সর্টিংয়ের পাশাপাশি এক ক্লিকে।

অনলাইনে সংবেদনশীল টেক্সট প্রসেস করা কি নিরাপদ?

হ্যাঁ। এই টুলটি ১০০% ক্লায়েন্ট-সাইড চলে — প্রতিটি অপারেশন আপনার ব্রাউজারে জাভাস্ক্রিপ্ট দিয়ে হয় এবং আপনার টেক্সট কখনও আপলোড, লগ, বা কোথাও পাঠানো হয় না। পেজ লোড হওয়ার পর আপনি ইন্টারনেট থেকে সংযোগ বিচ্ছিন্ন করতে পারেন এবং টুলটি কাজ করতেই থাকে। অনেক অনুরূপ টুল, কিছু টেক্সট ম্যানিপুলেশন এক্সটেনশন এবং সার্ভার-সাইড ওয়েব অ্যাপসহ, অ্যানালিটিক্স বা কোয়ালিটি উন্নতির জন্য ইনপুট লগ করে। এটি করে না। ট্যাব বন্ধ করুন আর ডেটা চলে যায় — এটি প্রথম থেকেই আর কোথাও ছিল না।

আমি কীভাবে প্রতিটি লাইন থেকে হোয়াইটস্পেস ট্রিম করব?

প্রতিটি লাইন থেকে শুরু ও শেষের স্পেস এবং ট্যাব সরাতে "Trim each line" চালু করুন, তাই " apple " হয়ে যায় "apple"। এটি PDF, স্প্রেডশিট, বা ডাটাবেস এক্সপোর্ট থেকে কপি করা তালিকার জন্য সমাধান যেখানে স্ট্রে স্পেস ডুপ্লিকেট মেলা বন্ধ করে বা একটি বর্ণানুক্রমিক সর্ট বিগড়ে দেয়। ট্রিমিং ডিডুপ্লিকেশন এবং সর্টিংয়ের আগে চলে, তাই ট্রিম এবং ডিডুপ্লিকেশন উভয় সক্রিয় থাকলে " apple " এবং "apple" একটি লাইনে গুটিয়ে যায়। লাইভ স্ট্যাটস আগে-এবং-পরের গণনা দেখায় যাতে আপনি নিশ্চিত করতে পারেন কতগুলো নিয়ার-ডুপ্লিকেট ধরা পড়েছে।

আমি কীভাবে আমার টেক্সটে ইউনিক লাইন গণনা করব?

আপনি টাইপ করার সাথে সাথে স্ট্যাটস বার Total, Unique, Blank, এবং Duplicates removed দেখায়। "Unique" হলো আপনার ইনপুটে ভিন্ন লাইনের গণনা, তাই ৪টি পুনরাবৃত্তিসহ একটি ১০-লাইনের তালিকা ৬টি ইউনিক দেখায়। শুধু সেই ইউনিক লাইনগুলো রাখতে "Remove duplicates" চালু করুন — "Duplicates removed" কাউন্টার বলে ঠিক কতগুলো কপি বাদ দেওয়া হয়েছিল। কাউন্টারটি লাইভ আপডেট হয়, তাই একটি আলাদা টুলে কপি না করেই আপনি সবসময় আপনার তালিকার অবস্থা জানেন। এটি একটি ডাটাবেস বা মেইলিং তালিকায় ইমপোর্ট করার আগে এক্সপোর্ট স্যানিটি-চেক করার জন্য উপকারী।