
У меня есть текстовый файл с данными, который выглядит следующим образом (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
экранированных символов, указанных выше.