с использованием EX / VI
Команда @reulsharabin Предложение:
ex -s +'g/bc_diffs=0$/d +2' +x file
, который аналогичен:
vim +':g/bc_diffs=0$/d +2' +:x file
(+ Command = Command = x = x
= Save и Quit)
Хорошо, хорошо, это плохое представление: Мы не должны загружаться в память такого огромного файла
sed '$!N;/:.*\n$/d;P;D' <infile
Вышеуказанная команда тянет в N
NECT на каждой строке, которая находится !
Не в $
в последний раз. Если он сталкивается с узором пространства, в котором находится :
толстой кишки, и последний символ представляет собой \ N
ewline, он удаляет партию. Это означает, что для линий, которые содержат толстую толстую кишки, и следующая строка пуста, оба будут удалены. Для всех остальных это P
P P Rints до первого возникновения \ N
EWLILE в шаблоне пространства, затем D
Тема того же, прежде чем начать начать с тем, что остается. Это дает вам одну строку на протяжении всего файла.
Просто хочу упомянуть, что вы могли бы сделать это, используя vi
:
:g/PATTERN/normal 2dd
Где PATTERN
- то, что вы ищете. Это совпадет с PATTERN
и выполнит 2dd
(удалит строку - 2 раза) в режиме normal
.
(Для приведенных ниже решений я предполагаю, что вы хотели, чтобы перед каждой строкой заголовка + последовательности была одна пустая строка. Если вы хотите, чтобы она была после, дайте мне знать; это легко сделать.)
sed
$ sed -rn 's/(.{106})/\n\1/p' file
B2S312_20116609 HWI-ST1128:217:D2HB4ACXX:8:1101:20814:45721 orig_bc=CCGCATAA new_bc=CCGCATAA bc_diffs=0 AACCATGCACCACCTGTATCTGTGTCTAACCAAAGGTCAGAACAACACAATCTCTTGTGTCCTCACAGTATGTCAAGACTT
B4S315_20116610 HWI-ST1128:217:D2HB4ACXX:8:1101:20948:45746 orig_bc=ATATGCCG new_bc=ATATGCCG bc_diffs=0 AACCATGCACCACCTGCACACGACCAACTAAATGCCACCACATCTCTGCAGTGTCGCCGTGCATGTCAAGCCTT
A2C214_20116612 HWI-ST1128:217:D2HB4ACXX:8:1101:21248:45534 orig_bc=CCTAGGAT new_bc=CCTAGGAT bc_diffs=0 AACCGTGCACCACCTGTTTTCTGGCTTCCGAAGAAGAGGAACTATCTCTAGTTCTGTCCATCAATGTCAAGACCT
-r
-r
указывает sed
использовать расширенные регулярные выражения.
-n
-n
сообщает sed
не печатать никаких строк, если это явно не указано.
s / (. {106}) / \ n \ 1 / p
Если какая-либо строка содержит не менее 106 символов, мы добавляем новую строку в начало и печатаем ее.
Поскольку пустые строки не содержат 106 символов, они не печатаются.
Поскольку строки без последовательностей ДНК короче 106 символов, они не печатаются.
Распечатываются строки с последовательностями ДНК (длина которых составляет 106 знаков или более). Поскольку пустые строки сами по себе не печатаются,мы должны добавить новую строку в начало строки. Таким образом гарантируется, что каждой записи ДНК предшествует пустая строка.
sed
При использовании OSX (BSD) попробуйте:
sed -E -n -e 's/(.{106})/\n\1/p' file
awk
awk '$6 {print "\n"$0}' file
Последовательность ДНК - шестое поле в строке. Таким образом, для любой строки с непустым шестым полем мы печатаем эту строку, перед которой ставится новая строка.