Как переименовать несколько столбцов в несколько файлов? - PullRequest
0 голосов
/ 16 января 2019

У меня есть несколько файлов, которые выглядят так:

trans_ENSG00000047849.txt.traw
trans_ENSG00000047848.txt.traw
trans_ENSG00000047847.txt.traw
...

В них у меня около 300 столбцов, а имена столбцов выглядят так:

NA20826_NA20826 NA20828_NA20828 NA20819_NA20819

Я хотел бы, чтобы имена моих столбцов во всех файлах имели вместо этого форму:

NA20826 NA20828 NA20819

Другими словами, я хотел бы удалить все после подчеркивания _ в каждом имени столбца и в каждом файле.

Я должен упомянуть, что здесь есть пробел в начале каждого файла.

Я пробовал это:

sed -ri 's/[_].*$//' trans_*.txt.traw

но когда я попытался открыть один из этих преобразованных файлов в R, я получил эту ошибку:

> e=read.table("trans_ENSG00000135541.txt.traw", header=TRUE)
Error in read.table("trans_ENSG00000135541.txt.traw", header = TRUE) : 
  more columns than column names

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Sed команда, которая вам нужна:

sed -ri 's/_\S*//g'

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

0 голосов
/ 16 января 2019

Я думаю, вы действительно хотите это:

$ echo -e "\tNA20826_NA20826\tNA20828_NA20828\tNA20819_NA20819" | sed -r '1s/_[^\t]*//g'
        NA20826 NA20828 NA20819

_[^\t]*, так как он TAB отделен, поэтому, начиная с _ до TAB (или конца строки), вещи должны быть удалены.
Флаг g заменяет все вхождения в строке.
Первый 1 ограничивает замену в первой строке - Строка заголовка.

Ваша собственная s команда ubstitude 's/[_].*$//', должна заменить с первого _ до конца строки, так что в итоге останется только один заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...