একটি বৃহত পাঠ্য ফাইলের প্রথম এন লাইনগুলি সরান


63

আমাকে 2 জিবি এসকিউএল ডাম্পের প্রথম 42 টি লাইন সরিয়ে ফেলতে হবে।

আমি জানি যে আমি প্রথম লাইনগুলি ব্যবহার করে দেখতে পারি:

head -n 44 dump.sql

তবে এগুলি সম্পাদনা বা অপসারণের কি কোনও উপায় আছে?

উত্তর:


91

আপনি যদি 43 তম থেকে লাইনগুলি দেখতে চান তবে আপনি ব্যবহার করতে পারেন

tail -n +43 dump.sql

+সাইন গুরুত্বপূর্ণ - ছাড়াই এটি, tailপ্রিন্ট হবে গত 43 লাইন পরিবর্তে। বিকল্পভাবে 'সেড' দিয়ে

sed 1,42d dump.sql

আপনি যদি আসল ফাইলটি থেকে প্রথম 42 টি লাইন মুছে ফেলতে চান তবে আপনি -iবিকল্পটি পরিবর্তন করে স্থান পরিবর্তন করতে পারেন

sed -i 1,42d dump.sql

দুর্দান্ত উত্তর, এর দুর্দান্ত ব্যবহার tail। আপনার উত্তরগুলি থেকে শিখতে আমি অনেকবার নতুন কিছু পেয়েছি। ধন্যবাদ।
সৌরভসি

1
ওহে ম্যান লেজ -n +৩৩ গেম চেঞ্জার! আমি একই প্রভাবের জন্য একটি অদ্ভুত অনুরোধ ব্যবহার করছি।
pfctdayelise

4
আপনার যদি ডিভাইসে জায়গা না থাকে? sed -i 1,50000000d 17GigFileএকটি টেম্প ফাইল তৈরি করে যা sedXYZআরও অনেক গিগাবাইট ব্যবহার করে। টেম্প ফাইলগুলি ছাড়া কোনও পন্থা আছে?
juanmf

প্রশ্নে উল্লিখিত tail -n +43এবং এর মধ্যে পার্থক্য কী head -n 44?
হাশিম

@juanmf একটি GUI টুল দিয়ে এই কাজ করার চেষ্টা করতে পারে (আমি এটা Mousepad ব্যবহার করা করেছি, কিন্তু সুদের ফাইল ছিল "কেবল" ~ 700MB লাগে অল্প সময়ের ফাইল লোড করার জন্য, যদিও ...।
খনক

18

এটি সবচেয়ে সহজ বলে মনে হচ্ছে:

sed '1,42d' test.sql > test2.sql

টেস্ট.এসকিউএল থেকে 1-42 লাইনগুলি সরিয়ে ফেলুন এবং test2.sql হিসাবে সংরক্ষণ করুন


9
যদি আপনার মূল ফাইলটি রাখার প্রয়োজন না হয় তবে একটি সংক্ষিপ্ত আকারে '1,42d' পরীক্ষা করা হবে q
সাদি 19


3

আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:

ex -s -c '1d42|x' dump.sql
  1. 1 প্রথম লাইনে যান

  2. 42 42 লাইন নির্বাচন করুন

  3. d মুছে ফেলা

  4. x সংরক্ষণ করেন এবং বন্ধ করেন


1
এটি একটি টেম্প ফাইল তৈরি করে? যখন ডিভাইসে থাকা স্থানটি ফাইলের আকারের চেয়ে কম থাকে তখন কি এটি করা সম্ভব?
juanmf

2
@ জুয়ানমফ এই সমস্ত সমাধানের জন্য একটি অস্থায়ী ফাইল প্রয়োজন। অস্থায়ী ফাইলটি ব্যবহার না করে কেবল কোনও ফাইলের প্রান্ত থেকে ডেটা সরিয়ে ফেলা সম্ভব ।
পার্লডাক

0

দুঃখিত, আমি এখনই আপনাকে প্রকৃত কোড দিতে পারি না। যাইহোক, এর লাইন বরাবর কিছু দেখার চেষ্টা করুন

tail -n arcv(`wc -l`) -44

এটি করা উচিত (একবার সঠিকভাবে ফর্ম্যাট করা) ফাইলের লাইন সংখ্যা গণনা (ডাব্লুসিএল-এল), এটি থেকে 44 বিয়োগ করুন (-44) এবং তারপরে ফাইলটির 45 তম লাইন দিয়ে শুরু হওয়া সমস্ত কিছু মুদ্রণ করে।

আশা করি এটি সহায়তা করে এবং সৌভাগ্য।


এটি মোটামুটি অনুকূল নয়, wc -lফাইলটিতে কল করে আপনি এটি দুটি বার প্রক্রিয়া করেন, তবে sedবা tailকেবল একবারেই প্রক্রিয়া করেন।
yo '

0

এটা চেষ্টা কর,

head -n 42 dump.sql > tmp; cat dump.sql | grep -vxf tmp > dump.sql.new; rm tmp

বা,

a=$(cat dump.sql| wc -l); tail -n "$((a-42))" dump.sql > dump.sql.new

0

এই যোগ করতে। আপনি যদি ম্যাকের উপরে থাকেন তবে আপনাকে ব্যাকআপ এক্সটেনশন যুক্ত করতে হবে। এই পোস্ট থেকে উত্তর ।

sed -i '.bak' 1,42d dump.sql

0

sedলিনাক্স এবং ম্যাক জুড়ে ত্রুটির কারণে , আমি tail -n +43 dump.sql > dump.sqlফর্ম্যাটটি ব্যবহার করার সংকল্প করেছি ।

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