Jadi, saya memiliki string yang terlihat seperti ini:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
Dan saya ingin membagi string menjadi potongan 3-karakter yang dibatasi oleh tanda '+'.
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
Dan saya ingin melakukan itu dengan teman baik saya sed
.
Saya mencoba
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... tanpa hasil.
sed
Perintah apa yang bisa saya gunakan?
text-processing
sed
ixtmixilix
sumber
sumber
Jawaban:
Karena Anda tidak ingin trailing
+
, Anda dapat melakukan:Yaitu, foldgaris pada 3karakter width, dan paste3 garis karakter tersebut bersama self dengan +sebagai delimiter yang pada dasarnya seperti mengubah setiap karakter baris baru tetapi yang terakhir menjadi a
+
. Jika input memiliki lebih dari satu baris, Anda akan berakhir dengan baris-baris yang digabungkan dengan+
yang mungkin atau mungkin tidak seperti yang Anda inginkan.Jika Anda memang menginginkannya
sed
, Anda dapat menghapus trailing+
setelah:sumber
+$
cocok dengan simbol plus tepat sebelum akhir baris.fold -w3
memecah string menjadi 3 garis karakter.paste -sd+ -
mengubah baris baru menjadi+
.untuk membuat jalan Anda bekerja, Anda tidak perlu melarikan diri
{}
simbol:sumber
Ini mungkin bekerja untuk Anda (sed GNU):
sumber
Jika bukan merupakan keharusan menggunakan Ruby mungkin menjadi alternatif. Penerjemah Ruby
ruby
,, dapat digunakan seperti sed dan awk dengan menjalankannya dengan-n
opsi yang membuatnya mengulangi inputnya. Penerjemah kemudian dapat diberi makan dengan Ruby satu-liner dengan menambahkannya sebagai argumen pada-e
opsi (yang memberi tahu penerjemah untuk menafsirkan argumen-e
daripada mencari skrip dalam file).Untuk masalah khusus ini, Anda dapat menggunakan one-liner berikut (diadaptasi dari https://stackoverflow.com/a/3184271/789593 ):
Dalam bahasa sederhana itu
scan(/.{3}|.+/)
dalam string input,$_
(dalam hal ini input diharapkan berasal dari standar) dan menempatkan setiap kecocokan dalam array,join("+")
,,puts
.Sebagai contoh
Perhatikan bahwa itu tidak menambahkan trailing '+'.
sumber