2016-06-14 3 views
2

У меня есть текстовый файл, часть которого имеет следующий форматКак удалить пробельные после буквенно-цифровой, что изменения по всему документу

exon_id=OFAS000007-RA-EXON02; transcript=OFAS000007-RA; 
exon_id=OFAS000007-RA-EXON05; transcript=OFAS000007-RA; 
exon_id=OFAS000008-RA-EXON03; transcript=OFAS000008-RA; 
exon_id=OFAS000017-RA-EXON07; transcript=OFAS000017-RA; 

Мне нужно удалить пустое пространство между двумя колоннами. Простой поиск и замена не будут работать, так как в этом файле есть много других столбцов с текстом, цифрами и символами, за которыми следует «;».

Я знаю, что любой подход поиска и замены должен будет принять часть «EXON» первой строки и часть «транскрипта» второй, но как я могу указать числа, которые отличаются от «EXON»?

EDIT: текстовый файл с разделителями табуляции содержит слишком много информации, чтобы даже вставить часть здесь; слишком много дополнительных столбцов, которые мне не нужно изменять каким-либо образом. Мне просто нужно объединить два столбца, упомянутые здесь, оставив все остальные отдельно, но в том же файле, в том же порядке. Вот то, что желаемый результат должен выглядеть, когда объединение двух столбцов:

exon_id=OFAS000007-RA-EXON02;transcript=OFAS000007-RA; 
exon_id=OFAS000007-RA-EXON05;transcript=OFAS000007-RA; 
exon_id=OFAS000008-RA-EXON03;transcript=OFAS000008-RA; 
exon_id=OFAS000017-RA-EXON07;transcript=OFAS000017-RA; 
+0

не могли бы вы привести примеры того, что вы не собираетесь сопоставлять? * Мне непонятно, имеет ли значение поле exon/transcript. * –

+0

Возможный дубликат [Удалить пробел перед полем, используя AWK] (http://stackoverflow.com/questions/409060/remove-whitespace-before -a-field-using-awk) – DevD

+0

Существует множество способов сделать с sed и awk. уже несколько ответов было получено в пробелах тегов и удалении-whitespace, которые вы использовали. – DevD

ответ

0

На Linux Я хотел бы использовать СЭД:

sed -i '/^exon_id/s/;[\t ]*transcript=/;transcript/' file_name 
     ^-------------------- match lines starting with 'exon_id 
        ^-------- match lines with ;<spaces>transcript= 

альтернатива, если вы планируете, чтобы соответствовать EXONXX, является:

sed -i '/EXON[0-9][0-9]/s/;[\t ]*transcript=/;transcript/' file_name 

ETA: Это выражение может быть уточнено, возможно, вам следует предоставить некоторые примеры того, что вы не хотите сопоставлять.

+0

В файле слишком много информации, чтобы даже вставить часть здесь. Это две колонки из многих. Мне просто нужно объединить эти два столбца, оставив все остальные отдельно, но в том же файле, в том же порядке. Вот как должен выглядеть желаемый результат при объединении двух колоний: 'exon_id = OFAS000007-RA-EXON02; транскрипт = OFAS000007-RA; exon_id = OFAS000007-RA-EXON05; транскрипт = OFAS000007-RA; exon_id = OFAS000008-RA-EXON03; транскрипт = OFAS000008-RA; exon_id = OFAS000017-RA-EXON07; транскрипт = OFAS000017-RA; ' –

+0

@MichaelForthman оба вышеупомянутых однострочных устройства дают желаемый результат, проблема заключается в« сопоставлении с образцом », требует установки правильного уровня мелкозернистых деталей в регулярное выражение. Вот почему мне нужно знать **, что уникально в отношении строк, которые вы хотите сопоставить? ** –

+0

@MichaelForthman обновил код для соответствия вкладкам тоже. –

 Смежные вопросы

  • Нет связанных вопросов^_^