у меня есть набор данных с двумя столбцами:Поиск нескольких вхождений одного выражения в строке
- десятичное число
- длинную строку
Со второй колонке я хотел бы для извлечения каждого номера FBtr (например, FBtr0072798) и игнорирования остальных.
0.850359 EFF=INTRON(MODIFIER|||||drpr|||FBtr0072798|4|1),INTRON(MODIFIER|||||drpr|||FBtr0072799|4|1),INTRON(MODIFIER|||||drpr|||FBtr0309845|4|1),SYNONYMOUS_CODING(LOW|SILENT|atT/atA|I690||CG18171|||FBtr0072800|1|1)
0.473555 EFF=INTRON(MODIFIER|||||drpr|||FBtr0072798|4|1),INTRON(MODIFIER|||||drpr|||FBtr0072799|4|1),INTRON(MODIFIER|||||drpr|||FBtr0309845|4|1),SYNONYMOUS_CODING(LOW|SILENT|agC/agT|S371||CG18171|||FBtr0072800|1|1),UPSTREAM(MODIFIER|||||CG12035|||FBtr0072766||1)
0.969735 EFF=INTRON(MODIFIER|||||drpr|||FBtr0072798|4|1),INTRON(MODIFIER|||||drpr|||FBtr0072799|4|1),INTRON(MODIFIER|||||drpr|||FBtr0309845|4|1),SYNONYMOUS_CODING(LOW|SILENT|gtT/gtC|V366||CG18171|||FBtr0072800|1|1),UPSTREAM(MODIFIER|||||CG12035|||FBtr0072766||1)
Я хотел бы в конце концов, чтобы перенести это в длинный формат, так что каждая строка содержит десятичное число от первого столбца, в паре с одним номером FBTR. Например,
0.850359 FBtr0072798
0.850359 FBtr0072799
0.850359 FBtr0309845
0.850359 FBtr0072800
0.473555 FBtr0072798
0.473555 FBtr0072799
0.473555 FBtr0309845
0.473555 FBtr0072800
0.473555 FBtr0072766
0.969735 FBtr0072798
0.969735 FBtr0072799
0.969735 FBtr0309845
0.969735 FBtr0072800
0.969735 FBtr0072766
Я пытаюсь сделать это в ступенчатом образе, первое экстрагированием числа FBTR в отдельную колонку:
0.850359 FBtr0072798 FBtr0072799 FBtr0309845 FBtr0072800
0.473555 FBtr0072798 FBtr0072799 FBtr0309845 FBtr0072800 FBtr0072766
0.969735 FBtr0072798 FBtr0072799 FBtr0309845 FBtr0072800 FBtr0072766
Тогда переходя от широких к длинному формату.
Прямо сейчас у меня возникают проблемы с извлечением номера FBtr. Я все больше новичок на python, чем unix, поэтому я пытался использовать unix, потому что я немного более удобен в отношении языка. Самая многообещающая вещь, которую я пробовал до сих пор, использует sed, чтобы выполнять поиск/замену для каждого из терминов повторно.
sed -e 's/\(.* \).*\(FBtr[0-9]*\).*\(FBtr[0-9]*\).*\(FBtr[0-9]*\).*\(FBtr[0-9]*\).*\(FBtr[0-9]*\).*/ \1 \2 \3 \4 \5 \6/ g' file.txt
Это не только некрасиво со всеми повторами, но работает только если есть такое же количество FBTR вхождений в строке, которые, к сожалению, не являются. Любые мысли о том, как подойти к этой проблеме в unix или python?
Если вы можете использовать 'GNU Awk', см. Мой ответ ниже. – Inian