Хорошо, я нашел похожие ответы на SO, но мой sed/grep/awk fu настолько беден, что я не мог их адаптировать к своей задаче. Что, учитывая этот файл «test.gff»:использовать sed для извлечения двух частей текста сразу из строки
accn|CP014704 RefSeq CDS 403 915 . + 0 ID=AZ909_00020;locus_tag=AZ909_00020;product=transcriptional regulator
accn|CP014704 RefSeq CDS 928 2334 . + 0 ID=AZ909_00025;locus_tag=AZ909_00025;product=FAD/NAD(P)-binding oxidoreductase
accn|CP014704 RefSeq CDS 31437 32681 . + 0 ID=AZ909_00145;locus_tag=AZ909_00145;product=gamma-glutamyl-phosphate reductase;gene=proA
accn|CP014704 RefSeq CDS 2355 2585 . + 0 ID=AZ909_00030;locus_tag=AZ909_00030;product=hypothetical protein
Я хочу, чтобы извлечь два значения 1) текст справа от «ID =» до запятой и 2) текст справа от «продукта =»до конца строки или точки с запятой (так как вы можете увидеть одну из линий также имеет„ген =“значение
Так что я хочу что-то вроде этого:.
ID product
AZ909_00020 transcriptional regulator
AZ909_00025 FAD/NAD(P)-binding oxidoreductase
AZ909_00145 gamma-glutamyl-phosphate reductase
Это насколько я получил:
printf "ID\tproduct\n"
sed -nr 's/^.*ID=(.*);.*product=(.*);/\1\t\2\p/' test.gff
Спасибо!
'sed' не подходит для таких задач. Используйте 'awk' – sjsam
Данные, которые вы предоставили, не соответствуют шаблону. Например, в 3-х столбцах есть «ген = проА». Будут ли дополнительные факультативные поля? – sjsam