Удаление пустой строки и строки выше его

Другой способ запустить конвейер в собственной группе процессов - это запустить [11784]sh -c '....'[11785] в псевдотерминале с помощью команды [11786] script[11787] (которая неявно применяет функцию [11788]setsid[11789]).[12131]
2
26.01.2015, 22:07
4 ответа

с использованием 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)

Хорошо, хорошо, это плохое представление: Мы не должны загружаться в память такого огромного файла

0
27.01.2020, 22:12
sed '$!N;/:.*\n$/d;P;D' <infile

Вышеуказанная команда тянет в N NECT на каждой строке, которая находится ! Не в $ в последний раз. Если он сталкивается с узором пространства, в котором находится : толстой кишки, и последний символ представляет собой \ N ewline, он удаляет партию. Это означает, что для линий, которые содержат толстую толстую кишки, и следующая строка пуста, оба будут удалены. Для всех остальных это P P P Rints до первого возникновения \ N EWLILE в шаблоне пространства, затем D Тема того же, прежде чем начать начать с тем, что остается. Это дает вам одну строку на протяжении всего файла.

2
27.01.2020, 22:12

Просто хочу упомянуть, что вы могли бы сделать это, используя vi:

:g/PATTERN/normal 2dd

Где PATTERN - то, что вы ищете. Это совпадет с PATTERN и выполнит 2dd (удалит строку - 2 раза) в режиме normal.

0
27.01.2020, 22:12

(Для приведенных ниже решений я предполагаю, что вы хотели, чтобы перед каждой строкой заголовка + последовательности была одна пустая строка. Если вы хотите, чтобы она была после, дайте мне знать; это легко сделать.)

Использование 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 знаков или более). Поскольку пустые строки сами по себе не печатаются,мы должны добавить новую строку в начало строки. Таким образом гарантируется, что каждой записи ДНК предшествует пустая строка.

Не-GNU sed

При использовании OSX (BSD) попробуйте:

sed -E -n -e 's/(.{106})/\n\1/p' file

Использование awk

awk '$6 {print "\n"$0}' file

Последовательность ДНК - шестое поле в строке. Таким образом, для любой строки с непустым шестым полем мы печатаем эту строку, перед которой ставится новая строка.

0
27.01.2020, 22:12

Теги

Похожие вопросы