আমার বাছাই করা ফাইলটি আরও বড় কেন?


28

আমার কাছে একটি 2958616 বাইট পাঠ্য ফাইল রয়েছে। আমি যখন রান করি তখন আমি sort < file.txt | uniq > sorted-file.txtএকটি 3213965 বাইট টেক্সট ফাইল পাই। আমার বাছাই করা পাঠ্য ফাইলটি আরও বড় কেন?

আপনি এখানে টেক্সট ফাইলগুলি ডাউনলোড করতে পারেন ।


5
আপনার আউটপুট ফাইলের \r\nলাইন শেষ রয়েছে, অন্যদিকে ইনপুট ফাইলটির \nলাইন শেষ রয়েছে। সম্ভবত আপনার লোকেলটি আলাদাভাবে সেট করা উচিত। LC_ALL=Cপ্রতিটি কমান্ডের সামনে চেষ্টা করুন ।
meuh

2
@ মিউহ! আপনি কি উত্তর হিসাবে যোগ করতে পারেন?
wb9688

5
থাক, লোকাল কি এটিকে প্রভাবিত করে? আপনি কোন লোকেল ব্যবহার করছেন? এর আউটপুট কি locale? আপনি কি নিশ্চিত যে আপনি ফাইলটি অন্য কোনও সিস্টেমে তৈরি করেননি?
টেরডন

6
sed '/^[a-z]*$/d' < file.txt | wc -l আমাকে 305 লাইন দিয়েছে
meuh

5
আপনার ফাইলটিতে â ê î ñ ô ö öö ûএএসসিআইআই সেটে থাকা ফাইলগুলিও রয়েছে ।
টেরডন

উত্তর:


42

আপনার আসল ফাইলটির সাথে শেষ হওয়া লাইনগুলি রয়েছে \n, আপনার সাজানো ফাইলটি রয়েছে \r\n। এর \rযোগটি যা আকার পরিবর্তন করে।

উদাহরণস্বরূপ, আমি যখন আমার লিনাক্স সিস্টেমে আপনার কমান্ডটি চালিত করি তখন কী হয়:

$ sort < file.txt | uniq > sorted-file.linux.txt
$ ls -l file.txt sorted-file.linux.txt 
-rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt
-rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt
$ wc -l file.txt sorted-file.linux.txt 
273882 file.txt
271576 sorted-file.linux.txt

আপনি দেখতে পাচ্ছেন, সাজানো ডি-ডুপড ফাইলটি কয়েকটি লাইন সংক্ষিপ্ত এবং ফলস্বরূপ কয়েকটি বাইট ছোট হয়। আপনার ফাইলটি অবশ্য আলাদা:

$ wc -l sorted-file.linux.txt sorted-file.txt 
271576 sorted-file.linux.txt
271576 sorted-file.txt

দুটি ফাইলের ঠিক একই সংখ্যক লাইন রয়েছে তবে:

$ ls -l file.txt sorted-file.linux.txt sorted-file.txt 
-rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt
-rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt
-rw-r--r-- 1 terdon terdon 3213965 Jul 10 12:11 sorted-file.txt

sorted-file.txt, এক আমি আপনার লিঙ্ক থেকে ডাউনলোড, বড়। যদি আমরা এখন প্রথম লাইনটি পরীক্ষা করি তবে আমরা অতিরিক্তটি দেখতে পাচ্ছি \r:

$ head -n1 sorted-file.txt | od -c
0000000   a  \r  \n
0000003

যেগুলি লিনাক্সে আমি তৈরি করেছি তার মধ্যে উপস্থিত নেই:

$ head -n1 sorted-file.linux.txt | od -c
0000000   a  \n
0000002

যদি আমরা এখন \rআপনার ফাইল থেকে সরিয়ে ফেলি:

$ tr -d '\r' < sorted-file.txt > new-sorted-file.txt

আমরা প্রত্যাশিত ফলাফল পেয়েছি, একটি ফাইল যা মূল থেকে ছোট, যেমনটি আমার সিস্টেমে আমি তৈরি করেছি:

$ ls -l sorted-file.linux.txt new-sorted-file.txt file.txt
-rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt
-rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:19 new-sorted-file.txt
-rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt

3
সাজ্ট কমান্ড কীভাবে ফলাফল ফাইলটিতে added r যুক্ত করে? \ R প্লাস \ না উইন্ডোজ জিনিসটির সংমিশ্রণটি কি নয়?
তুলিনাস কর্ডোভা

3
@ TulainsCórdova এটি একটি খুব ভাল প্রশ্ন। আমার কোন ধারণা নাই. আমি ধরে নিচ্ছি যে ওপি একটি অ-নেটিভ পরিবেশে এটি করেছে তবে আমি জানি না। এবং হ্যাঁ, \r\nলাইন শেষগুলি একটি উইন্ডোজ জিনিস thing
টেরডন

25

hexdump এটি প্রকাশ!

$ hexdump -cn 32 file.txt 
0000000   a   d   h   d  \n   a   d   s   l  \n   a   m   v   b  \n   a
0000010   o   v  \n   a   o   w  \n   a   r   o   b  \n   a   s   f   a
0000020

$ hexdump -cn 32 my-sorted.txt 
0000000   a  \n   a   a  \n   a   a   a  \n   a   a   d  \n   a   a   d
0000010   s  \n   a   a   f   j   e  \n   a   a   f   j   e   s  \n   a
0000020 

$ hexdump -cn 32 sorted-file.txt 
0000000   a  \r  \n   a   a  \r  \n   a   a   a  \r  \n   a   a   d  \r
0000010  \n   a   a   d   s  \r  \n   a   a   f   j   e  \r  \n   a   a
0000020   

আপনার সাজানো ফাইলটি বড় কারণ এটি \r\nলিনাক্স লাইন এন্ডিং \n(একটি বাইট) এর পরিবর্তে উইন্ডোজ লাইন এন্ডিংস (দুটি বাইট) ব্যবহার করে ।

আপনি কি উইন্ডোজের অধীনে এই কমান্ডটি cygwinউইন্ডোজ 10 এর মতো এই নতুন লিনাক্স সাবসিস্টেমটি ব্যবহার করে চালিয়ে যাচ্ছেন ? বা আপনি সম্ভবত ওয়াইনে কিছু চালাবেন?


লিনাক্সের জন্য এই নতুন উইন্ডোজ সাবসিস্টেম ? বাশ শুধুমাত্র একটি লিনাক্স প্রোগ্রাম যা এতে চলছে; বাছাই বাশ হয় না।
ব্যবহারকারী 253751

@ ইমিবিস আপনি উইন্ডোজের জন্য লিনাক্স সাবসিস্টেম বোঝাচ্ছেন ? আমি এটি বোঝাতে চাইছিলাম, তবে এখনও এটিতে আমি খুব বেশি আগ্রহী হইনি, সুতরাং এখন পর্যন্ত এটির চেষ্টা বা গবেষণা করে নি।
বাইট কমান্ডার

এটি আসলে লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম নামে পরিচিত , তবে উভয়ই তা উপলব্ধি করে। (দেখুন এটি অন্য সাবসিস্টেমের সাথে কীভাবে দেখবে: হয় "কনসোলের জন্য উইন্ডোজ সাবসিস্টেম [অ্যাপ্লিকেশন]" বা "কনসোল [অ্যাপ্লিকেশন] উইন্ডোজের জন্য সাবসিস্টেম") তা বোঝায়)
ব্যবহারকারী 253751

@ ইমিবিস আহা, ঠিক আছে। আপনি দেখতে পাচ্ছেন যে আমি এখনও সেই নির্দিষ্ট বিষয়ে খুব একটা আগ্রহী ছিলাম না। আমাকে ক্ষমা করুন, দয়া করে :)
বাইট কমান্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.