দু'জন করে ফাইলের লাইনে গ্রুপিং করবেন কীভাবে?


9

আমার কাছে এই জাতীয় পাঠ্য ফাইল রয়েছে:

a
b
c
d
e
f
g

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

a-b
b-c
c-d
d-e
e-f
f-g

আমাকে শেল (sh, csh, bash) এ এটি করতে হবে।

আমি এটি খুঁজে পেয়েছি:

cat file | xargs -n2

তবে প্রথম গ্রুপের শেষ উপাদানটি দ্বিতীয়টির প্রথম হয় না।

উত্তর:


9

সহ awk:

awk 'NR!=1{print x"-"$0}{x=$0}' file
  • NR!=1 প্রথমটি বাদে সমস্ত লাইনে প্রযোজ্য
  • print x"-"$0 এর মধ্যে ড্যাশ সহ মানগুলি মুদ্রণ করুন
  • x=$0সেট x(পরবর্তী পুনরাবৃত্তির জন্য)

5

পসিক্স সহ sed:

sed '1{
  h
  d
}
H
x
s/\n/-/
' <file

বা ওয়ান-লাইন সংস্করণ:

sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file

দ্বিতীয় লাইনের প্রথম অক্ষরটি আমার প্রথম লাইনে সর্বশেষ হতে হবে ...
কস্টেল বাল্টা-কোম্যান

হোল্ড স্পেসের দুর্দান্ত ব্যবহার।
ওয়াইল্ডকার্ড

হ্যাঁ, ঠিক আছে।
মাইকজার্ভ

এটি কীভাবে কাজ করে তা আপনি ব্যাখ্যা করতে পারেন?
ইওসোরিয়ান

5
paste -d- - ./infile <infile

^ আপনার ইনপুটটি একের পর এক ব্যতীত এটি সত্যিই ভাল কাজ করবে। তাই ...

{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'

... কাজ করবে, তবে খুব জটিল ...


ঠিক আছে, ওপি প্রয়োজনীয়তাটি ভুলভাবে পড়ার পরে ঠিক প্রথমটি আমার মনে এসেছিল, তবে আমি সিদ্ধান্ত নিলাম যে sedএটি একা করে দেওয়া হোক।
cuonglm

@ কুওগলম - আমি কি এটি ভুল লিখেছি?
মাইক্রজারভ

1
না, আমি বাজি ধরছি। তবে আপনার sed 1d\;\$dএটি সংশোধন করা দরকার ।
cuonglm

এই রূপটি কেমন? sed '2~2p' infile | paste -d- - -
স্টিল্ড্রাইভার

1
এখন আমি দেখি. paste -d- <(head -n -1 input) <(tail -n +2 input)
কস্টাস

2

আরো একটা sed

sed '$!N;s/\n/-/p;s/-/\n/;D' <input

এবং সংশোধন করা যেতে পারে ( মাইক্রোজারকে ধন্যবাদ ):

sed -n 'N;y/\n/-/;P;y/-/\n/;D' <input

1
y/-\n/\n-/উভয় s /// প্রতিস্থাপন করতে পারে। এটি যদি করা হয় তবে তা, n ব্যবহারের জন্য দ্রুত এবং পোর্টেবল হবে।
মাইকজার্ভ

1

একটি খাঁটি বাশ সংস্করণ -

old=""; while read -r line ; do [[ -n "$old" ]] && echo   $old-$line;   old=$line; done  < input

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