আমি কীভাবে শেল কমান্ড ব্যবহার করে একটি এসকিআই ফাইলের প্রথম এন লাইনগুলি মুছব?


92

আমার কাছে একাধিক ফাইল রয়েছে যাতে প্রথম 5-10 লাইনে ascii পাঠ্য তথ্য থাকে, তারপরে ভাল-ট্যাবুলেটেড ম্যাট্রিক্স তথ্য থাকে। শেল স্ক্রিপ্টে, আমি এই প্রথম কয়েকটি লাইন পাঠ্যের মুছে ফেলতে চাই যাতে আমি অন্য প্রোগ্রামে খাঁটি ম্যাট্রিক্স তথ্যটি ব্যবহার করতে পারি। এটি করার জন্য আমি কীভাবে ব্যাশ শেল কমান্ড ব্যবহার করতে পারি?

যদি এটির কোনও সহায়তা হয় তবে আমি রেডহ্যাট এবং একটি উবুন্টু লিনাক্স সিস্টেম ব্যবহার করছি।

উত্তর:


143

যতক্ষণ না ফাইলটি কোনও সিমিলিংক বা হার্ডলিঙ্ক না থাকে আপনি সেড, লেজ বা জাজক ব্যবহার করতে পারেন। নীচে উদাহরণ।

$ cat t.txt
12
34
56
78
90

কিন্তু

$ sed -e '1,3d' < t.txt
78
90

এছাড়াও আপনি একটি টেম্প ফাইল ছাড়াই জায়গা কিন্তু ব্যবহার করতে পারেন: sed -i -e 1,3d yourfile। এটি কোনও কিছু প্রতিধ্বনিত করবে না, এটি কেবলমাত্র স্থানটিতে স্থান পরিবর্তন করবে। যদি আপনাকে ফলাফলটি অন্য কমান্ডে পাইপ করতে না হয় তবে এটি সহজ।

লেজ

$ tail -n +4 t.txt
78
90

awk

$ awk 'NR > 3 { print }' < t.txt
78
90

8
এছাড়াও আপনি একটি টেম্প ফাইল ছাড়াই জায়গা কিন্তু ব্যবহার করতে পারেন: sed -i -e 1,3d yourfile। এটি কোনও কিছু প্রতিধ্বনিত করবে না, এটি কেবলমাত্র স্থানটিতে স্থান পরিবর্তন করবে। যদি আপনাকে ফলাফলটি অন্য কমান্ডে পাইপ করতে না হয় তবে এটি সহজ।
ইয়ানিক গিরার্ড

1
ধন্যবাদ @ ইয়ানিকগিরুয়ার্ড, @ ইগনাসিও ওয়াজকেজএব্রামস! আপনারা দুজনেই আমার গবেষণায় আমাকে এক টন ম্যানুয়াল শ্রম সঞ্চয় করেছেন! :)
পল

2
@Svetlana sed -iবিশেষভাবে। বেশিরভাগ বাস্তবায়ন কেবল ফাইলটি মুছবে এবং এটিকে একটি নতুন সাথে প্রতিস্থাপন করবে, যা লিঙ্কগুলির জন্য কাজ করে না কারণ আপনি অন্যটি স্থানে আসলটি রেখে শেষ করেন।
jw013

6
কী কী '1,3 ডি', +4, ইত্যাদি সম্পর্কে ব্যাখ্যা করবেন? মানে? প্রশ্নটি এন লাইনের জন্য ছিল, তবে আপনি এনটি কী তা বলেন নি (উদাহরণস্বরূপ আপনার উদাহরণগুলিতে এন 2 হয়, যদিও এন পরিবর্তনের জন্য কোনও নুব-র কি পরিবর্তন করা উচিত তা স্পষ্ট নয়)
রবিন মনোলি

3
এটি একটি টেম্প ফাইল ব্যবহার করে সুতরাং 100% ইউজড ডিস্ক জায়গার জন্য খুব কার্যকর নয়। আক্ষরিক "ইন-প্লেস" এর এমন একটি সমাধান পাওয়া আকর্ষণীয় হবে।
শাই

10

sed -i '1,3d' file.txt

এটি file.txt থেকে প্রথম 3 লাইন মুছে ফেলে।


6

ট্যাবুলেটেড লাইনগুলি যদি ট্যাব অক্ষরযুক্ত থাকে তবে:

grep '␉' <input_file >output_file

( আক্ষরিক ট্যাব অক্ষর হওয়া) বা সমতুল্য

sed -n '/␉/p' <input_file >output_file

একটি ব্যাশ / ksh / zsh স্ক্রিপ্ট, আপনি লিখতে পারেন $'\t'একটি ট্যাব, যেমন জন্য grep $'\t'বা sed -n $'/\t/p'

আপনি যদি ফাইলটির শুরুতে 10 টি লাইন মুছে ফেলতে চান:

tail -n +11 <input_file >output_file

(দ্রষ্টব্য যে এটি +1110 টি লাইন নির্মূল করতে হবে , কারণ এর +11অর্থ "11 লাইন থেকে শুরু করুন" এবং লেজ সংখ্যার লাইন 1 থেকে) বা

sed '1,10d' <input_file >output_file

লিনাক্সে, আপনি -iজায়গায় ফাইলগুলি সংশোধন করতে GNU সেড বিকল্পের সুবিধা নিতে পারেন :

sed -i -n '/\t/p' *.txt

অথবা আপনি শেল লুপ এবং অস্থায়ী ফাইলগুলি ব্যবহার করতে পারেন:

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

অথবা আপনি যদি ফাইলগুলিকে জায়গায় পরিবর্তন করতে না চান তবে পরিবর্তে তাদের আলাদা নাম দিন:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

3
"ট্যাবুলেটেড" এর অর্থ সাধারণত "টেবিলের অক্ষরে ইন্ডেন্ট করা" নয়, "একটি টেবিলের মধ্যে বেশ ছাপানো"।
Ignacio Vazquez-Abram

@ IgnacioVazquez-Abram আমি জানি। সুন্দর-মুদ্রিত টেবিলটি মাঝে মাঝে ট্যাব অক্ষর ব্যবহার করে, এটি সারিবদ্ধ কলামগুলির চেয়ে স্পট করা সহজ। অবশ্যই, পল যদি একটি নমুনা ইনপুট দেয় তবে আমি আরও ভাল ম্যাচার দিতে পারি।
গিলস

2

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

ex -sc '1d5|x' file
  1. 1 প্রথম লাইনে যান

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

  3. d মুছে ফেলা

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


0

প্রতিধ্বনি "a \ nb" | সেড '1 ডি' # প্রথম লাইনটি মুছে ফেলে

বিড়াল list.txt | সেড '1d'> list.csv # পঠন তালিকা.txt এবং প্রথম লাইন ছাড়া list.csv লিখুন

অন্যান্য দরকারী আদেশ:

গ্রেপ '^ |' # প্রথম অক্ষর খুঁজে বের করে (পাইপ |)

sed 's / | // g' # পাইপ মুছে দেয়

sed 's / // g' # স্থান মুছে দেয়


0

শতাংশ দ্বারা

ব্যবহার bash, লাইনের একটি পরম সংখ্যা পরিবর্তে শতকরা নম্বর ব্যবহার করে একটি ফাইল পরিষ্কার করতে:

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

সতর্কতা অবলম্বন করুন কারণ এই কমান্ডটি ধ্বংসাত্মক হতে পারে কারণ এটি কোনও অনুলিপি তৈরি না করেই স্থানটিতে সামগ্রী মুছে দেয়।

এটি উল্লিখিত ফাইল থেকে প্রথম 75% লাইন মুছে ফেলে।

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