উত্তর:
ed
পরিবর্তে চেষ্টা করুন:
ed <<< $'1d\nwq' large_file
যদি সেই "বৃহত্তর" অর্থ প্রায় 10 মিলিয়ন লাইন বা তার বেশি হয় তবে আরও ভাল ব্যবহার tail
। ইন-প্লেস সম্পাদনা করতে সক্ষম নয়, তবে এর অভিনয়টি ক্ষমাযোগ্য অযোগ্য করে তোলে:
tail -n +2 large_file > large_file.new
কিছু সময়ের পার্থক্য দেখাতে সম্পাদনা করুন :
( awk
জয়পালের কোডটি একই মেশিনে কার্যকর হওয়ার সময় যুক্ত করেছে (সিপিইউ ২.২ জিগাহার্টজ)।)
bash-4.2$ seq 1000000 > bigfile.txt # further file creations skipped
bash-4.2$ time sed -i 1d bigfile.txt
time 0m4.318s
bash-4.2$ time ed -s <<< $'1d\nwq' bigfile.txt
time 0m0.533s
bash-4.2$ time perl -pi -e 'undef$_ if$.==1' bigfile.txt
time 0m0.626s
bash-4.2$ time { tail -n +2 bigfile.txt > bigfile.new && mv -f bigfile.new bigfile.txt; }
time 0m0.034s
bash-4.2$ time { awk 'NR>1 {print}' bigfile.txt > newfile.txt && mv -f newfile.txt bigfile.txt; }
time 0m0.328s
awk
এবং নিম্নলিখিত ফলাফল পেয়েছি -[jaypal:~/Temp] seq 1000000 > bigfile.txt [jaypal:~/Temp] time awk 'NR>1 {print}' bigfile.txt >newfile.txt real 0m0.649s user 0m0.601s sys 0m0.033s
awk
এর পারফরম্যান্সটি এর কাছাকাছি হবে sed
। (আমার কাছে নোট করুন: কখনও প্রত্যাশা করবেন না - পরিবর্তে পরীক্ষা করুন))
tail -n +2 bigfile.txt > bigfile.new && mv -f bigfile.new bigfile.txt;
আমি একাধিক প্রক্রিয়া দ্বারা ব্যবহৃত একক টাস্ক তালিকার উপর নজর রাখতে লকযুক্ত একটি ফাইল ব্যবহার করছি am আমি যা প্রাথমিক পোস্টার ব্যবহৃত দিয়ে শুরু: sed -i 1d large_file
। যার ফলে ফাইলটি 1-2 সেকেন্ডের জন্য লক হয়ে গিয়েছিল। tail/mv
কম্বো প্রায় তাত্ক্ষণিকভাবে সমাপ্ত হবে। ধন্যবাদ!
কোনও ফাইলের শুরু থেকে জিনিসগুলি দক্ষতার সাথে সরানোর কোনও উপায় নেই। শুরু থেকে ডেটা সরিয়ে ফেলার জন্য পুরো ফাইলটি পুনরায় লেখার প্রয়োজন।
কোনও ফাইলের শেষে থেকে ছাঁটাই খুব দ্রুত হতে পারে যদিও (ওএসকে কেবলমাত্র ফাইলের আকারের তথ্য সামঞ্জস্য করতে হবে, সম্ভবত এখন অব্যবহৃত ব্লকগুলি সাফ করে দিতে হবে)। আপনি যখন কোনও ফাইলের মাথা থেকে সরিয়ে দেওয়ার চেষ্টা করেন এটি সাধারণত সম্ভব হয় না।
আপনি তাত্ত্বিকভাবে "দ্রুত" হতে পারেন যদি আপনি পুরো ব্লক / সীমাটি হুবহু সরিয়ে ফেলে থাকেন তবে এর জন্য কোনও সিস্টেম কল নেই, সুতরাং আপনাকে ফাইল-সিস্টেম-নির্দিষ্ট শব্দার্থবিজ্ঞানের উপর নির্ভর করতে হবে (যদি এর উপস্থিত থাকে)। (বা ফাইলের আসল প্রারম্ভিক চিহ্ন চিহ্নিত করতে প্রথম ব্লক / পরিমাণের মধ্যে অফসেটের কিছু ফর্ম রয়েছে, আমি অনুমান করি Never এটি কখনও শুনিনি))
সবচেয়ে দক্ষ পদ্ধতি, এটি করবেন না! আপনি যদি কোনও ক্ষেত্রে করেন তবে আপনার ডিস্কে দু'বার 'বড়' স্থান প্রয়োজন এবং আপনি আইওগুলি অপচয় করেন।
আপনি যদি 1 ম লাইন ছাড়াই পড়তে চান এমন কোনও বৃহত ফাইলের সাথে আটকে থাকেন তবে 1 ম লাইনটি অপসারণ করার জন্য এটি পড়ার দরকার না হওয়া পর্যন্ত অপেক্ষা করুন। আপনার যদি স্টিডিন থেকে কোনও প্রোগ্রামে ফাইলটি প্রেরণের দরকার হয় তবে এটি করতে লেজ ব্যবহার করুন:
tail -n +2 | your_program
আপনার যখন ফাইলটি পড়তে হবে তখন আপনি 1 ম লাইনটি সরিয়ে ফেলার সুযোগ নিতে পারেন তবে কেবলমাত্র আপনার যদি ডিস্কে প্রয়োজনীয় স্থান থাকে:
tail -n +2 | tee large_file2 | your_program
আপনি স্টিডিন থেকে পড়তে না পারলে একটি ফিফো ব্যবহার করুন:
mkfifo large_file_wo_1st_line
tail -n +2 large_file > large_file_wo_1st_line&
your_program -i large_file_wo_1st_line
আরও ভাল আপনি যদি ব্যাশ ব্যবহার করছেন তবে প্রক্রিয়া প্রতিস্থাপনের সুযোগ নিন:
your_program -i <(tail -n +2 large_file)
আপনার যদি ফাইলটি সন্ধানের প্রয়োজন হয় তবে আমি প্রথমে ফাইলটির সাথে আটকে না যাওয়ার চেয়ে ভাল সমাধান দেখতে পাচ্ছি না। এই ফাইলটি stdout দ্বারা উত্পাদিত হলে:
large_file_generator | tail -n +2 > large_file
অন্যথায়, সবসময়ই ফিফো বা প্রক্রিয়া বিকল্প সমাধান থাকে:
mkfifo large_file_with_1st_file
large_file_generator -o large_file_with_1st_file&
tail -n +2 large_file_with_1st_file > large_file_wo_1st_file
large_file_generator -o >(tail -n 2+ > large_file_wo_1st_file)
আপনি প্রাক্তন মোডে ভিম ব্যবহার করতে পারেন:
ex -sc '1d|x' large_file
1
প্রথম লাইন নির্বাচন করুন
d
মুছে ফেলা
x
সংরক্ষণ করেন এবং বন্ধ করেন
এটি কেবল তাত্ত্বিক, তবে ...
একটি কাস্টম ফাইল সিস্টেম (FUSE বা অনুরূপ প্রক্রিয়া ব্যবহার করে প্রয়োগ করা) এমন একটি ডিরেক্টরি প্রকাশ করতে পারে যার বিষয়বস্তু অন্য কোথাও ইতিমধ্যে বিদ্যমান ডিরেক্টরি হিসাবে একই, তবে আপনার ইচ্ছামত ফাইল কেটে দেওয়া হয়। ফাইল সিস্টেম সমস্ত ফাইল অফসেট অনুবাদ করবে। তারপরে আপনাকে কোনও ফাইলের সময়োপযোগী পুনর্লিখন করতে হবে না।
তবে এই ধারণাটি খুব অল্প-তুচ্ছ, যদি না আপনি এই ধরণের ফাইলগুলির দশক টেরাবাইট না পেয়ে থাকেন তবে এ জাতীয় ফাইল সিস্টেম প্রয়োগ করা ব্যয়বহুল / সময় সাপেক্ষিক হতে পারে না।
tail
, আমি বরং সময় পর্যন্ত গণনা হবে উভয় প্রথম লাইন অপসারণ এবং প্রতিস্থাপনbigfile.txt
সঙ্গেbigfile.new
।