আমি প্রতি তৃতীয় চরিত্রের পরে একটি চরিত্র যুক্ত করতে একটি সেড ওয়ান-লাইনার কীভাবে লিখব?


10

সুতরাং, আমার কাছে একটি স্ট্রিং রয়েছে যা দেখতে এটির মতো দেখাচ্ছে:

AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA

এবং আমি স্ট্রিংটি একটি '+' চিহ্ন দ্বারা সীমাবদ্ধ 3-অক্ষরের অংশগুলিতে বিভক্ত করতে চাই।

AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA

এবং আমি আমার ভাল বন্ধুর সাথে এটি করতে চাই sed

আমি চেষ্টা করেছিলাম

cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'

... কোন সাফল্য ছাড়া।

sedআমি কোন আদেশ ব্যবহার করতে পারি?


1
এটি কি কোনওভাবে রোজালিন্ডের সাথে সংযুক্ত নয় ? উৎসুক.
এম0 নাহক

উত্তর:


16

আপনি যেহেতু পিছনে +যেতে চান না তাই আপনি এটি করতে পারেন :

fold -w3 | paste -sd+ -

অর্থাৎ foldলাইন 3চরিত্র width, এবং pasteতাদের সাথে যারা 3 অক্ষর লাইন sসঙ্গে পরী +যেমন delimiter যা প্রভাব প্রতিটি newline অক্ষর কিন্তু একটি মধ্যে গত এক পরিবর্তন মত হল +। যদি ইনপুটটির একাধিক লাইন থাকে, আপনি সেই লাইনের সাথে শেষ হয়ে গেলেন +যা আপনি যা চান তা নাও পারে।

আপনার যদি এটির প্রয়োজন হয় তবে আপনি নিম্নলিখিতটি sedসরিয়ে ফেলতে পারেন +:

sed 's/.../&+/g;s/+$//'

কীভাবে এটি কাজ করে তার একটি সংক্ষিপ্ত ব্যাখ্যা যোগ করতে আপনি আপত্তি করবেন?
এনএন

@NN এটি কাজ করে কারণ +$একটি লাইন শেষ হওয়ার আগেই প্লাস চিহ্নের সাথে মেলে।
ক্রিস ডাউন

fold -w3স্ট্রিংটি 3 টি অক্ষরের লাইনে বিভক্ত করে। paste -sd+ -নতুন লাইনে পরিণত হয় +
বাহামা

12
sed 's/.../&+/g'

আপনার পথে কাজ করার জন্য আপনাকে {}প্রতীকগুলি এড়াতে হবে না :

sed -r 's/([A-Z]{3})/\1+/g'

1
কে জানত! আমি এখনও এতো কাছে ছিলাম ... ধন্যবাদ ...
ixtmixilix

দু'জনেই '+' লেজ যুক্ত করে। এটা কি উদ্দেশ্য?
এনএন

2

এটি আপনার (জিএনইউ সেড) কাজ করতে পারে:

sed 's/...\B/&+/g' file

0

সেড না হলে অবশ্যই রুবি ব্যবহার করা বিকল্প হতে পারে। রুবি ইন্টারপ্রেটার, rubyসিড এবং অ্যাজকের মতো ব্যবহার করা যেতে পারে -nবিকল্পটি চালিয়ে এটি তার ইনপুটটি পুনরাবৃত্তি করে। তারপরে অনুবাদককে রুবি ওয়ান-লাইনারের সাথে -eবিকল্পের যুক্তি হিসাবে যুক্ত করে খাওয়ানো যেতে পারে (যা দোভাষীকে -eকোনও ফাইলের স্ক্রিপ্ট সন্ধান করার চেয়ে যুক্তিটি ব্যাখ্যা করতে বলে )।

এই বিশেষ সমস্যার জন্য আপনি নিম্নলিখিত ওয়ান-লাইনার ব্যবহার করতে পারেন ( https://stackoverflow.com/a/3184271/789593 থেকে অভিযোজিত ):

ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'

সরল ভাষায় এটি

  • scan(/.{3}|.+/)ইনপুট স্ট্রিংয়ে যে কোনও 3 টি অক্ষর বা কমপক্ষে একটি অক্ষরের সাথে মেলে , $_(এক্ষেত্রে ইনপুটটি স্ট্যান্ডার্ড ইন থেকে প্রত্যাশিত) এবং প্রতিটি ম্যাচ একটি অ্যারেতে রাখে,
  • প্রতিটি উপাদানকে সংযুক্ত করে '+' দিয়ে স্ট্রিতে অ্যারের সাথে যোগ দেয় join("+"),
  • এবং এটি একটি নতুন লাইন দ্বারা সমাপ্ত প্রিন্ট করে puts

উদাহরণ স্বরূপ

echo "AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUG" | ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UG

মনে রাখবেন এটি কোনও '' 'পিছনে যুক্ত করে না।

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