বাশ / সেড / অ্যাজক / ইত্যাদি প্রতিটি অন্যান্য নতুন লাইন সরান


39

একটি বাশ কমান্ড এটি আউটপুট করে:

Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active

আমি এটির মতো দেখতে এটি কোনওরকম পাইপ করতে চাই:

Runtime Name: vmhba2:C0:T1:L14 Group State: active 
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]

অর্থাত্ প্রতিটি অন্যান্য নতুনলাইন সরান

আমি চেষ্টা ... |tr "\nGroup" " "করেছি কিন্তু এটি সমস্ত নতুন লাইনগুলি সরিয়েছে এবং পাশাপাশি কয়েকটি অন্যান্য চিঠিও খেয়েছে। ধন্যবাদ


2
trসম্পূর্ণ চরিত্রভিত্তিক: আপনি ট্রলকে নতুনলাইনগুলি এবং সমস্ত 'জি', 'আর', 'ও', 'ইউ', এবং 'পি' মুছে ফেলতে বলেছিলেন।
গ্লেন জ্যাকম্যান

উত্তর:


80

এখনই পরীক্ষা করতে পারবেন না, কিন্তু

... | paste - - 

এটা করা উচিত


5
+1 - কাজ করে এবং মার্জিত হয়। (এটি লাইনের মধ্যে একটি ট্যাব রাখে - paste -d ' ' - -প্রয়োজনে পরিবর্তে একটি স্থান যুক্ত করবে)
সাইবারএক্স 86

4
আপনি দয়া করে ব্যাখ্যা করতে পারেন কমান্ডটি কীভাবে কাজ করে? দু'জন কেন -? ধন্যবাদ
বিবাজা 42

7
pasteফাইল থেকে সংশ্লিষ্ট লাইন কনক্যাটেনেট করতে ব্যবহৃত হয়: paste file1 file2 file3 ...। যদি কোনও "ফাইল" আর্গুমেন্ট "-" হয় তবে স্ট্যান্ডার্ড ইনপুট থেকে লাইনগুলি পড়া হয় are যদি 2 "-" টি আর্গুমেন্ট থাকে তবে স্টিডিন থেকে 2 লাইন লাগবে paste ইত্যাদি। দেখুন man পৃষ্ঠা
গ্লেন জ্যাকম্যান

10

একটি সম্ভাবনা হ'ল:

awk 'ORS=NR%2?" ":"\n"'

লাইন নম্বরটি যদি 2 দ্বারা সমানভাবে বিভাজ্য হয় তবে একটি নতুন লাইনের সাথে শেষ করুন, অন্যথায়, একটি স্পেস দিয়ে শেষ করুন।

(পরীক্ষিত: সেন্টস 6, জিএনইউ অ্যাওক ৩.১..7)

সেড ব্যবহার করে ( ব্যাখ্যা দেখুন ):

sed ':a;N;$!ba;s/\nGroup/ Group/g'

আরও পড়া:


8

আপনি যদি ব্যবহার করতে চান sedতবে পুরো ফাইলটি মেমোরিতে পড়ার কোনও কারণ নেই। আপনি অন্য প্রতিটি লাইনকে এভাবে মার্জ করতে পারেন:

sed 'N;s/\n/ /' inputfile

জায়গার পরিবর্তে আপনি যে কোনও অক্ষর চান তা ব্যবহার করুন।

অ্যাজক ব্যবহারের অন্য উপায় এখানে:

awk '{printf "%s", $0; if (getline) print " " $0; else printf "\n"}' inputfile

if/elseহ্যান্ডলগুলি ক্ষেত্রে যেখানে ফাইলে লাইনের একটি বিজোড় সংখ্যা নেই। এটি ছাড়া, বিজোড় শেষ লাইনটি দু'বার মুদ্রিত হয়। অন্যথায় তুলনা করার জন্য, আপনি এটি করতে পারেন:

awk '{printf "%s", $0; getline; print " " $0}'

1
একজন প্রয়াত মন্তব্য: 1) সবসময় ক্ষেত্রে printf জন্য একটি বিন্যাসে সুনির্দিষ্টভাবে উল্লেখ করা ব্যবহার স্ট্রিং শতাংশ চিহ্ন রয়েছে 2) শেষ লাইনটি সদৃশ, "" থেকে $ 0 সেট এড়াতে -awk '{printf "%s", $0; $0=""; getline; print " " $0}'
গ্লেন জ্যাকম্যান

3

এটি করার সবচেয়ে মূর্খ উপায়টি awkনিম্নরূপ:

awk 'ORS=NR%2?FS:RS' file

এটি ফলাফল:

Runtime Name: vmhba2:C0:T3:L14 Group State: active
Runtime Name: vmhba3:C0:T0:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14 Group State: active
Runtime Name: vmhba2:C0:T2:L14 Group State: active

এটি ব্যাখ্যা করার জন্য আমাদের প্রতিটি বিল্ট-ইন ভেরিয়েবলের সংজ্ঞা দিতে হবে:

  • RSরেকর্ড বিভাজক। \n(নতুন লাইন) এ ডিফল্ট ।
  • ORSআউটপুট রেকর্ড বিভাজক। \n(নতুন লাইন) এ ডিফল্ট ।
  • FSক্ষেত্র বিভাজক। (স্পেস) এ ডিফল্ট ।
  • NR রেকর্ড সংখ্যা।

ডিফল্ট রেকর্ড পৃথককারীটি নতুন লাইন হিসাবে, একটি রেকর্ড, ডিফল্ট হিসাবে, একটি লাইন।

NR%2এর মডুলাস NR/2, যাতে এটি হয় 0বা হয় 10এমনকি লাইন এবং 1বিজোড় লাইনের জন্য।

var=condition?condition_if_true:condition_if_false হ'ল টেরিনারি অপারেটর।

সবাই মিলে এই বলে যে ORS=NR%2?FS:RSআমরা আউটপুট রেকর্ড বিভাজককে সংজ্ঞায়িত করছি:

  • যদি রেকর্ডের সংখ্যাটি ফর্মটিতে থাকে 2k + 1, এটি হল লাইনগুলিতে, তবে আউটপুট রেকর্ড পৃথককারীকে সেট করা হয় FS, এটি একটি স্পেস।
  • যদি রেকর্ডের সংখ্যাটি ফর্মটিতে থাকে 2k, যা বিজোড় লাইনে থাকে তবে আউটপুট রেকর্ড পৃথককারীকে সেট করা হয় RS, এটি একটি নতুন লাইন।

এইভাবে, বিজোড় লাইনগুলি একটি স্পেস দিয়ে শেষ হয়, তারপরে পরবর্তী লাইনের সাথে যুক্ত হয়। এই লাইনের পরে, একটি নতুন লাইন প্রিন্ট করা হয়।

আইডিয়োম্যাটিক অ্যাজকে আরও তথ্য ।


2

এটি আমার জন্য লিনাক্সে কাজ করে:

... | tr "\\n" " "

এটি একটি নতুন লাইনের চরিত্রের জন্য একটি খালি স্থান প্রতিস্থাপন করে; জিনিসগুলি সঠিকভাবে কাজ করার জন্য আপনাকে অবশ্যই নিউলাইন চরিত্রটি থেকে বাঁচতে হবে।


এটি প্রতিটি নতুনলাইন অপসারণ করে, অন্য প্রতিটি নতুন লাইন নয়।
ট্রেন্টন


1

পার্ল যদি একটি বিকল্প হয়:

perl -pe 's/\n/ / if $. % 2 == 1' file

s/\n/ /স্থানের সাথে নিউলাইন প্রতিস্থাপন
$.হ'ল লাইন নম্বর


-1

কিভাবে ব্যবহার সম্পর্কে grep?

.. | grep -v '^Group State'

এটি বিকল্প রেখাগুলি সরিয়ে দেয়। ওপি তাদের সংযুক্ত করতে চায়।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

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