আমি কীভাবে একই লাইনে মাল্টলাইন আউটপুট প্রিন্ট করতে পারি?


16

একই লাইনে মাল্টি-লাইন আউটপুট (একক আউটপুট) মুদ্রণের জন্য কি কোনও পদ্ধতি আছে?

উদাহরণস্বরূপ, যদি আউটপুট হয়:

abc
def
qwerty

এটি কি মুদ্রণ করা সম্ভব:

abcdefqwerty 

উত্তর:


13

আপনি দেওয়া সেট থেকে অক্ষরের সমস্ত উপস্থিতি সরাতে পারেন tr -d। নিউলাইন চরিত্রের ব্যবহার সরাতে:

tr -d '\n'

সর্বদা হিসাবে আপনি ফাইল এবং অন্যান্য প্রক্রিয়াগুলি থেকে পড়তে বা লিখতে ইনপুট এবং আউটপুট পুনর্নির্দেশ এবং পাইপগুলি ব্যবহার করতে পারেন।

আপনি গত সম্পর্কে newline রাখতে চান তবে আপনি এটিকে কেবল ফিরে যোগ করতে পারেন echoবা printf '\n', যেমন:

cat file1 file2... | { tr -d '\n'; echo; } > output.txt

10

অনেক পথে. উদাহরণস্বরূপ, আমি এখানে আপনার উদাহরণ সংরক্ষণ করেছি 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

আমি মনে করি printf+ + cat+ + perlকম্বো অনেক ভালো মাধ্যমে পরিচালিত হয় perl -pe 's/\n//;END{printf "\n"}' input.txt একক প্রক্রিয়া, কোন কম্যান্ড-প্রতিকল্পন এবং কোট সঙ্গে তালগোল পাকানো, এবং কোন UUOC। সম্ভবত।
সের্গেই কোলোডিয়াজনি

7

আপনি আপনার মাল্টলাইন আউটপুট মাধ্যমে পাইপ করতে পারেন 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 ব্যবহার করে লাইন ব্রেকটি সরান



2

আপনি যদি এর জন্য পার্ল ব্যবহার করতে চান তবে আপনি এর 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কেবল শেষের একটিটিকে সরিয়ে ফেলবে (যদি কোনও হয় তবে একেবারে শেষ রেখার একটি থাকতে পারে বা নাও থাকতে পারে)।

পারফরম্যান্স পছন্দ করতে প্রধান কারণ হতে পারে না chompperlকমান্ড 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" } একই প্রক্রিয়া, পেছনের প্রতিধ্বনি যুক্ত করার তুলনায় সামান্য সুবিধা
সের্গেই কলডিয়াজহনি


1

এই উত্তরের আপনি যে সমস্যার সমাধান করতে চাইছেন তার একটি সমাধান রয়েছে: বাশ কেন cat n কে cat (বিড়াল ফাইল) সরিয়ে দেয়?

আপনি টাইপ cat myfile.txtকরলে দেখতে পাবেন:

abc
def
ghi

তবে আপনি টাইপ echo $(cat myfile.txt)করলে দেখতে পাবেন:

abc def ghi

নোট করুন এই পদ্ধতিটি এমন একটি স্থান সন্নিবেশ করায় যেখানে পৃথক পৃথক নতুন লাইন ব্যবহৃত হত। এটি আউটপুটটি পড়া সহজ করে তোলে তবে আপনার প্রশ্নের ক্ষেত্রের সাথে কঠোরভাবে মেনে চলে না।


0

আপনি যদি ব্যাশ ব্যবহার করে থাকেন তবে কোনও বাহ্যিক সরঞ্জাম ছাড়াই আপনি এটি করতে পারেন।

x=($(echo line1; echo line2))
echo "${x[@]}"

ফলাফল:

line1 line2

প্রথম কমান্ড মাল্টলাইন আউটপুটটিকে একটি অ্যারেতে রূপান্তর করে, দ্বিতীয় কমান্ড অ্যারেটিকে এক লাইনের একাধিক আর্গুমেন্টে প্রসারিত করে।

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