একই লাইনে মাল্টি-লাইন আউটপুট (একক আউটপুট) মুদ্রণের জন্য কি কোনও পদ্ধতি আছে?
উদাহরণস্বরূপ, যদি আউটপুট হয়:
abc
def
qwerty
এটি কি মুদ্রণ করা সম্ভব:
abcdefqwerty
একই লাইনে মাল্টি-লাইন আউটপুট (একক আউটপুট) মুদ্রণের জন্য কি কোনও পদ্ধতি আছে?
উদাহরণস্বরূপ, যদি আউটপুট হয়:
abc
def
qwerty
এটি কি মুদ্রণ করা সম্ভব:
abcdefqwerty
উত্তর:
আপনি দেওয়া সেট থেকে অক্ষরের সমস্ত উপস্থিতি সরাতে পারেন tr -d
। নিউলাইন চরিত্রের ব্যবহার সরাতে:
tr -d '\n'
সর্বদা হিসাবে আপনি ফাইল এবং অন্যান্য প্রক্রিয়াগুলি থেকে পড়তে বা লিখতে ইনপুট এবং আউটপুট পুনর্নির্দেশ এবং পাইপগুলি ব্যবহার করতে পারেন।
আপনি গত সম্পর্কে newline রাখতে চান তবে আপনি এটিকে কেবল ফিরে যোগ করতে পারেন echo
বা printf '\n'
, যেমন:
cat file1 file2... | { tr -d '\n'; echo; } > output.txt
অনেক পথে. উদাহরণস্বরূপ, আমি এখানে আপনার উদাহরণ সংরক্ষণ করেছি file
:
$ cat file | tr -d '\n'
abcdefqwerty$
$ cat file | perl -pe 's/\n//'
abcdefqwerty$
এটি সর্বশেষে অন্তর্ভুক্ত সমস্ত নিউলাইন অক্ষর মুছে ফেলে। পরিবর্তে আপনি এটি করতে চান:
$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
আপনি আপনার মাল্টলাইন আউটপুট মাধ্যমে পাইপ করতে পারেন awk
awk '{printf "%s",$0} END {print ""}'
বা ব্যবহার করুন sed
:
sed ':a;N;$!ba;s/\n//g'
$ echo -e "1\n2\n3\n4" | awk '{printf "%s",$0} END {print ""}'
1234
$ echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n//g'
1234
আরও পড়ুন: AWK · serverfault.SE ব্যবহার করে লাইন ব্রেকটি সরান
এছাড়াও your_command | paste -sd ''
চিহ্ন সম্পর্কে newline অপরিবর্তিত পারে।
আপনি যদি এর জন্য পার্ল ব্যবহার করতে চান তবে আপনি এর chomp
ফাংশনটি ব্যবহার করতে পারেন :
perl -pe chomp
আপনি পরবর্তী যুক্তি হিসাবে এক বা একাধিক ফাইলের নাম পাস করতে পারেন।
perl -pe chomp file1 file2 file3
কিছু ক্ষেত্রে আপনি এটি করতে নাও চান , তবে আপনি তার পরিবর্তে পাইপ বা নির্দেশটি পুনর্নির্দেশ করতে পারেন। (এই ক্ষমতাগুলি - এবং সেই সতর্কীকরণ - সমস্তগুলি অন্য কোনও perl -p
বা perl -n
ভিত্তিক সমাধানের ক্ষেত্রেও প্রযোজ্য ))
সুতরাং, আপনি যদি চালানো থেকে আউটপুট প্রক্রিয়া করতে চান some-command
:
some-command | perl -pe chomp
এটি টেরডনের উত্তরের পার্ল কমান্ডের চেয়ে সম্ভাব্য দ্রুত । নিউলাইন অক্ষরগুলি (প্রতিনিধিত্ব করে \n
) কেবলমাত্র এই পরিস্থিতিতে লাইনের শেষে উপস্থিত হয় - কারণ তারা প্রতিটি লাইন কোথায় শেষ হবে তা সিদ্ধান্ত নিতে পার্ল ব্যবহার করছে। s/\n//
নিউলাইনগুলির জন্য পুরো লাইনটি অনুসন্ধান করে, যখন chomp
কেবল শেষের একটিটিকে সরিয়ে ফেলবে (যদি কোনও হয় তবে একেবারে শেষ রেখার একটি থাকতে পারে বা নাও থাকতে পারে)।
পারফরম্যান্স পছন্দ করতে প্রধান কারণ হতে পারে না chomp
। perl
কমান্ড terdon এর উত্তর শুধুমাত্র সামান্য মন্থর হতে যদি না আপনি খুব দীর্ঘ লাইনের একটি বিশাল ফাইল প্রক্রিয়াকরণ করছি যাবে। এবং আপনার যদি গতির প্রয়োজন হয় তবে ডেভিড ফোস্টারসের উপায়টি সম্ভবত এখনও দ্রুত। chomp
যাইহোক, এই ঠিক ডান টুল আপনি Perl ব্যবহার করছেন কিনা তা হয়, এবং আমি মনে করি এর অভিপ্রায় chomp
যে এর চেয়ে পরিস্কার হয় s/\n//
। শেষ পর্যন্ত সম্ভবত এর চেয়ে ভাল কোন উত্তর নেই।
তবে, আমি অনুমান করি যে কমান্ড সাবস্টিটিউশন ( $(
)
) ব্যবহারের বিরুদ্ধে কেবল একটি অনুমানযোগ্য নতুন লাইনটি মুদ্রিত হয় তা নিশ্চিত করার জন্য recommend আপনি প্রক্রিয়াকরণ করা পাঠ্য সংক্ষিপ্ত না হলে, এটি বেশ ধীর হতে পারে - এটি একবারে সমস্ত পাঠ সংগ্রহ করতে হবে এবং তারপরে মুদ্রণ করতে হবে - এবং এটি আপনার আদেশটি বুঝতে আরও শক্ত করে তোলে। পরিবর্তে আপনি ডেভিড ফোস্টার তার পরামর্শ অনুসারে এবং চালাতে echo
বা printf '\n'
তারপরে এটি করতে পারেন।
perl -pe chomp; echo
তুমি বংশীধ্বনিতুল্য যদি থেকে অথবা (ডেভিড Foerster শো হিসাবে) পুনঃনির্দেশ থেকে যে কমান্ড, তাহলে আপনি এটি ঘিরা করতে {
;}
যাতে উভয় কমান্ড আউটপুট একসঙ্গে নেওয়া হয়। আপনি যদি কেবল এটি টার্মিনালে মুদ্রণ করেন তবে উপরের চিত্রের মতো আপনি এটি চালাতে পারেন। এই যদি তুমি বংশীধ্বনিতুল্য বা পুনঃনির্দেশিত এমনকি কাজ করে যাও কমান্ড, কারণ echo
/ printf '\n'
আসলে কোনো ইনপুট পড়া নেই। এটি, এটি কাজ করে:
some-command | perl -pe chomp; echo
এখানে থাকাকালীন আপনি কেবল এটিকে সরাতে পারবেন না {
;}
:
{ perl -pe chomp; echo; } | some-other-command
অথবা, আপনি যদি পছন্দ করেন তবে আপনি perl
নিজেই চূড়ান্ত নিউলাইন মুদ্রণ করতে পারেন । পরিক্ষেপ মতো perl
এবং echo
কমান্ড {
;}
, এই পদ্ধতির কাজ করে এমনকি যদি তুমি বংশীধ্বনিতুল্য বা পুনঃনির্দেশ থেকে এটা (এবং, মত সব পন্থা, যখন তুমি বংশীধ্বনিতুল্য এই কাজ করার জন্য এটা খুব):
perl -wpe 'chomp; END { print "\n" }'
নোট করুন যে টেরডনের উত্তরের কমান্ডটিও চূড়ান্ত নিউলাইনটি মুদ্রণের এই পদ্ধতিগুলির সাথে ঠিক কাজ করে। উদাহরণ স্বরূপ:
perl -pe 's/\n//'; echo
perl -pe 's/\n//; END { print "\n" }'
perl -wpe 'chomp; END { print "\n" }
একই প্রক্রিয়া, পেছনের প্রতিধ্বনি যুক্ত করার তুলনায় সামান্য সুবিধা
শেল-একমাত্র উপায় ব্যবহার:
while IFS= read -r line || [ -n "$line" ]; do printf "%s" "$line"; done < inputfile.txt
এই উত্তরের আপনি যে সমস্যার সমাধান করতে চাইছেন তার একটি সমাধান রয়েছে: বাশ কেন cat n কে cat (বিড়াল ফাইল) সরিয়ে দেয়?
আপনি টাইপ cat myfile.txt
করলে দেখতে পাবেন:
abc
def
ghi
তবে আপনি টাইপ echo $(cat myfile.txt)
করলে দেখতে পাবেন:
abc def ghi
নোট করুন এই পদ্ধতিটি এমন একটি স্থান সন্নিবেশ করায় যেখানে পৃথক পৃথক নতুন লাইন ব্যবহৃত হত। এটি আউটপুটটি পড়া সহজ করে তোলে তবে আপনার প্রশ্নের ক্ষেত্রের সাথে কঠোরভাবে মেনে চলে না।
printf
+ +cat
+ +perl
কম্বো অনেক ভালো মাধ্যমে পরিচালিত হয়perl -pe 's/\n//;END{printf "\n"}' input.txt
একক প্রক্রিয়া, কোন কম্যান্ড-প্রতিকল্পন এবং কোট সঙ্গে তালগোল পাকানো, এবং কোন UUOC। সম্ভবত।