извлечение строк из большого текстового файла

извлечение строк из большого текстового файла

У меня есть текстовый файл с данными, который выглядит следующим образом (1875 строк, если быть точным)

chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924    10660933    0.818294903 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417    12327426    0.584010382 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433    12327442    0.825226087 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 

Я ищу решение для извлечения строк, которые имеют «+» около самого конца. (это происходит после последнего ;. Аналогично я ищу решение для извлечения -строк прядей и помещения их в отдельные файлы.

Редактирование: изменение набора данных, раньше смотрел не на тот файл.

решение1

Из комментариев я понял, что вы хотите извлечь строки, 7-й столбец которых либо +или -. Входной файл разделен табуляцией. Чтобы сделать это, сохраняя строки +в файл с именем plus, а отрицательные строки в файл с именем minus, наиболее естественным инструментом, вероятно, будет awk:

awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file

Как это работает:

  • -F'\t'

    awkсчитывает запись (строку) за раз и разделяет ее на поля. Здесь мы устанавливаем разделитель полей на табуляцию.

  • $7=="+"{print >"plus"}

    Если 7-е поле — +, то сохраните строку в файле plus.

  • $7=="-"{print>"minus"}

    Аналогично, если 7-е поле — это -, то сохраните строку в файле minus.

решение2

sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile

Для седьмого раздела, разделенного табуляцией, выполните следующее:

sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
            /^-/{g;w minus.file' -e 'b
         }; /^+/{g;w plus.file'  -e \}

Однако вам, возможно, придется использовать буквальный <tab>символ вместо \tэкранированных символов, указанных выше.

Связанный контент