আমি কীভাবে কোনও পাঠ্য ফাইলের বিষয়বস্তু অনুলিপি করতে এবং একটি নির্দিষ্ট লাইনে শুরু করে অন্যটিতে এটি আটকে দিতে পারি?


13

আমার একটি পাঠ্য ফাইলের বিষয়বস্তু অনুলিপি করা এবং এটি অন্য পাঠ্য ফাইলে আটকানো দরকার। প্রথম পাঠ্য ফাইলে 10 টি লাইন ডেটা রয়েছে এবং আমার এগুলি 5 নং লাইনের (উদাহরণস্বরূপ) থেকে শুরু করে দ্বিতীয় পাঠ্য ফাইলে অনুলিপি করা প্রয়োজন। সুতরাং দ্বিতীয় পাঠ্য ফাইলে সেই ডেটাগুলি লাইন 5 থেকে লাইন 14 পর্যন্ত লেখা উচিত this এটি কীভাবে করা যায়? আগাম ধন্যবাদ. লিনাক্স সম্পর্কিত আমাকে একটি দম্পতি হিসাবে বিবেচনা করুন।

উত্তর:


10

headএবং tailসমাধান

সোর্স ফাইল বলা হয় ধরে ~/aএবং ফাইল সন্নিবেশিত করা বলা হয় ~/b। আমরা মার্জ করা ফাইলটি এতে রাখব ~/c:

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • পাথ ~/আপনার জন্য ছোট হাত /home/userডিরেক্টরির নাম
  • মাথা aনতুন নির্মিত ফাইলটিতে প্রথম পাঁচটি লাইন ফাইল অনুলিপি করেc
  • বিড়াল ফাইলের বিষয়বস্তু তালিকাভুক্ত করে এবং ফাইলগুলিতে bসংযোজন করেc
  • লেজটি ফাইলের aশেষ হওয়া অবধি 6 লাইনে শুরু হওয়া ফাইল সংযুক্ত করেc

যাচাইয়ের পরে নামটি একীভূত করা ফাইল

যে ফাইল যাচাই করার পর cফাইল থেকে সঠিকভাবে মিশে গিয়ে তৈরি হয় aএবং bআমরা নামান্তর করব cকরার aব্যবহার করছে:

mv ~/c ~/a
  • mvফাইল ফাইল cমধ্যে সরানো a। ডেটা শারীরিকভাবে সরানো হয়নি। ফাইলটি কেবল নামকরণ করা হয় যা সময় সাশ্রয় করে।

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। এটা ঠিক কাজ করে। তবে তৃতীয় পাঠ্য ফাইল ব্যবহার না করে এটি করার অন্য কোনও উপায় আছে?
জি পাসচালিস

তৃতীয় ফাইলটি হয়ে গেলে সোর্স ফাইলটির নাম পরিবর্তন করা যায়। আমি প্রথমে ফাইলটি দেখতে সক্ষম হওয়াকে ভাল মনে করেছি। আমি এখনই উত্তরের অতিরিক্ত পদক্ষেপগুলি যুক্ত করব।
WinEunuuchs2Unix

বা ...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@ জাজোও এটি একটি দুর্দান্ত এক লাইনের সংক্ষিপ্তসার :) পাঠদানের উদ্দেশ্যে আমি কমান্ডের পদ্ধতি অনুসারে এক লাইন ব্যবহার করতে পছন্দ করি এবং বিবৃতি থাকলে নেস্ট করে থাকি। তবে অনুলিপি করতে এবং টার্মিনালে আটকানোর জন্য আমি এক লাইনার পছন্দ করি!
WinEunuuchs2 ইউনিক্স

16

এখানে সবচেয়ে সহজ সরঞ্জাম হতে পারে sed। ঢোকাতে b.txtমধ্যে a.txt5th লাইন পরে, আপনি লিখতে পেরেছিলেন:

sed '5r b.txt' a.txt

sedআর্গুমেন্ট ( a.txt) লাইন লাইন লিখে স্পষ্ট করে ফাইলটি পড়ে । সমস্ত লাইন আউটপুটে যেমন পুনরায় উত্পাদিত হয় ঠিক তেমনই ইনপুটটিতে প্রদর্শিত হয়, যদি না কোনও কমান্ড দ্বারা পরিবর্তন হয়।

5একটি ঠিকানা (লাইন নম্বর) যা নিম্নলিখিত নির্দেশ অবশ্যই কার্যকর হবে হয়। আমরা যে কমান্ডটি ব্যবহার করি তা হ'ল rএটি একটি ফাইলের নাম আর্গুমেন্ট হিসাবে (এখানে b.txt) গ্রহণ করে, এটি পুরোপুরি পড়ে এবং বর্তমান লাইনের পরে আউটপুটে সন্নিবেশ করে।

এটি উপরে দাঁড়িয়ে আছে, এই sedকমান্ড লাইনটি কোনও ফাইলগুলিতে না লিখে শুধুমাত্র টার্মিনালে আউটপুট প্রিন্ট করবে। আপনি বাশের আউটপুট পুনঃনির্দেশ ব্যবহার করে এটি কোনও নতুন ফাইলে (কোনও ইনপুট ফাইল নয়!) পুনর্নির্দেশ করতে পারেন:

sed '5r b.txt' a.txt > c.txt

অথবা আপনি সরাসরি বাইরের ইনপুট ফাইল পরিবর্তন করতে পারেন a.txtব্যবহার করে sedএর -i(জন্য "এ জায়গা") সুইচ। আপনি যদি এটি লিখেন তবে -i.bakএটি প্রত্যয়টি সহ .bakপ্রথমে মূল ইনপুট ফাইলটির একটি ব্যাকআপ কপি তৈরি করবে :

sed -i '5r b.txt' a.txt

একটি উদাহরণ:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December

0

(@ বাইটকম্যান্ডারের কাছ থেকে মার্জিত উদাহরণের পুনঃব্যবহার :)

awk '1; NR==5 {system("cat b.txt")}' a.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.