cat <<EOS | sed -ne '1{h;d;}' -e 'H;${G;p;}'
line 1
line 2
line 3
EOS
এটি ব্যবহার করে tailএমন কিছুতে এটি অনুবাদ করার সাথে সম্পর্কিত সমস্যাটি হ'ল tailএটির শেষ সন্ধানের জন্য পুরো ফাইলটি পড়তে হবে। আপনার পাইপলাইনে এটি ব্যবহার করতে, আপনার প্রয়োজন
- নথির সম্পূর্ণ সামগ্রী সরবরাহ করুন
tail।
- এটি আবার প্রদান
cat।
- সেই জন্য.
জটিল বিটটি নথির সামগ্রীতে নকল করা নয় ( teeএটি করে) তবে tailঅন্তর্বর্তী অস্থায়ী ফাইলটি ব্যবহার না করেই বাকী নথির আউটপুট আসার আগে আউটপুট ঘটবে।
sed(বা জন 1024awk যেমনটি ব্যবহার করা ) ব্যবহার করে ডেটা ডাবল পার্সিং এবং অর্ডারিং ইস্যু থেকে ডেটা মেমোরিতে সঞ্চয় করে মুক্তি পাওয়া যায়।
sedসমাধান আমি উত্থাপন করা হয়
1{h;d;}, হোল্ড স্পেসে প্রথম লাইনটি সংরক্ষণ করুন, যেমন রয়েছে, এবং পরবর্তী লাইনে যান।
H, এম্বেড করা নতুনলাইন সহ একে অপরের লাইনটিকে হোল্ড স্পেসে যুক্ত করুন।
${G;p;}এম্বেড করা নতুন লাইনের সাহায্যে হোল্ড স্পেসটি শেষ লাইনে যুক্ত করুন এবং ফলাফলটি মুদ্রণ করুন।
এটি জন1024 এর সমাধানটির পুরো আক্ষরিক অনুবাদ sed, এই সাবধানতার সাথে যে পসিএক্স স্ট্যান্ডার্ডটি কেবল গ্যারান্টি দেয় যে হোল্ড স্পেসটি কমপক্ষে 8192 বাইট (8 কিবি;) রয়েছে তবে এটি সুপারিশ করে যে এই বাফারটি গতিশীলভাবে বরাদ্দ করা হয়েছে এবং প্রয়োজনীয় হিসাবে প্রসারিত করা হয়েছে, যা উভয়ই জিএনইউ করেছে sedএবং বিএসডি sedকরছে)
যদি আপনি নিজেকে একটি নামক পাইপ ব্যবহার করার অনুমতি দেন:
mkfifo mypipe
cat <<EOS | tee mypipe | cat <( tail -n 1 mypipe ) -
line 1
line 2
line 3
EOS
rm -f mypipe
এটি teeডেটা নিচে mypipeএবং একই সাথে প্রেরণে ব্যবহার করে cat। catউপযোগ প্রথম থেকে আউটপুট পড়তে হবে tail(যা থেকে সার্চ mypipe, যা teeলেখা হয়), এবং তারপর দস্তাবেজ থেকে সরাসরি আসছে কপি সংযোজন tee।
সেখানে যে যদি নথি এই যদিও একটি গুরুতর ত্রুটি আছে, অত্যন্ত বড় (নল এর বাফারের আকার চেয়ে বড়), teeথেকে এর লেখা mypipeএবং catযখন (নামবিহীন) পাইপ খালি জন্য অপেক্ষা ব্লক হবে। এটি catথেকে পড়া না হওয়া পর্যন্ত খালি করা হবে না । catশেষ না হওয়া পর্যন্ত এটি থেকে পড়া হবে না tail। এবং tailশেষ না হওয়া পর্যন্ত শেষ হবে না tee। এটি একটি ক্লাসিক অচলাবস্থার পরিস্থিতি।
তারতম্য
tee >( tail -n 1 >mypipe ) | cat mypipe -
একই সমস্যা আছে।