Разрезание строк в файле одинаковой длины, но с новыми идентификаторами - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть файл, каждая вторая строка которого имеет неодинаковую длину. Я хочу сделать эти строки равными (каждая вторая строка вывода должна быть равна 10 символам), но с новым идентификатором (каждая нечетная строка).

ФАЙЛ ->

>ZQMK36301EDYQE
ZHZHHEXZZHHZZHHZZXHHHEHHHZZZHHHZHXZHZ
>ZQMK36301EEMJ9
ZZZXHZHHXHHHEZZEEZZHZZZZXEZ
>ZQMK36301EOEM5
ZXHXHZZHEHHHXZEZHXXXHXHHHHXEHHHZHHHH


desired output ->


>ZQMK36301EDYQE
ZHZHHEXZZH
>ZQMK36301EDYQE#2
HZZHHZZXHH
>ZQMK36301EDYQE#3
HEHHHZZZHH
>ZQMK36301EEMJ9
ZZZXHZHHXH
>ZQMK36301EEMJ9#2
HHEZZEEZZH
>ZQMK36301EOEM5
ZXHXHZZHEH
>ZQMK36301EOEM5#2
HHXZEZHXXX
>ZQMK36301EOEM5#3
HXHHHHXEHH

Здесь, если мы берем первую строку, которая является идентификатором (> ZQMK36301EDYQE), а во второй строке она содержит 37 символов. Теперь он создаст 3 последовательности одинаковой длины (i: e 10), и если оставшиеся символы меньше 10, мы бросим эту часть. Теперь каждая новая строка равной длины имеет идентификатор, который совпадает с тем, из какой части последовательности она получена, но за которой следуют "#" и номер. Я хочу сделать это для всего файла. Пожалуйста, помогите.

Спасибо и С наилучшими пожеланиями, Викас

1 Ответ

1 голос
/ 23 февраля 2012

В качестве однострочника:

perl -nwle '
     $i=0; 
     for my $add (<>=~/.{10}/g) { 
         printf "%s%s\n%s\n", $_, $i++ ? "#$i":"", $add; 
     }' inputfile

-n чтение файла построчно и сохранение строки в $_. -l автоматически вводит данные. Мы предполагаем, что первая строка - заголовок, а вторая - данные. $i - это счетчик, поэтому он сбрасывается для каждой новой пары линий. Список циклов for создается на лету, читая одну строку <>, а затем извлекает из нее 10-символьные строки с регулярным выражением Затем мы просто распечатываем материал и следим за тем, чтобы не показывать счетчик нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...