хранить только первую букву для строк в любом поле файла с разделителями табуляции - PullRequest
1 голос
/ 29 июля 2011

Мне бы хотелось, чтобы ваша справка содержала только первую букву для любых строк в полях файла с разделителями табуляции.

Я думаю, что sed может сделать эту работу.Я пытался, но мне не удалось.Я рассчитываю на ваши советы и указания.

Заранее спасибо.

Пустой пример:

my_file, (с разделителями табуляции)

1   11656   TCAG    .   TCAG    TCAG    .   TCAG    TCAG    TCAG
1   11660   CT  .   CT  CT  .   CT  CT  CT
1   11662   ATGG    .   ATGG    ATGG    .   ATGG    ATGG    ATGG
1   11680   A   .   A   A   .   A   A   A
1   11732   C   .   C   C   .   C   C   T
1   11742   T   .   T   C   .   T   T   T

Что я хочу:

1   11656   T   .   T   T   .   T   T   T
1   11660   C   .   C   C   .   C   C   C
1   11662   A   .   A   A   .   A   A   A
1   11680   A   .   A   A   .   A   A   A
1   11732   C   .   C   C   .   C   C   T
1   11742   T   .   T   C   .   T   T   T

Код, который я тестировал:

# (1) workable for only one string
echo abcd123 | sed 's/\([a-z]\).*/\1/'
# (2) not work for my data file
sed 's/\([a-z]\).*/\1/' my_file
sed 's/\([a-z]\).*/\1/g' my_file

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Попробуйте:

sed 's/\([ATGC]\)[ATGC]*/\1/g' my_file

Конечно, если вы работаете с более чем ATGC, разверните оба набора символов.

Я считаю, что ваша проблема с использованием .*что все символы будут перенесены в конец строки, заменяя только первое вхождение вашей измененной последовательности.Используя второй [ATGC], вы ограничиваете строку поиска только этими последовательностями.

2 голосов
/ 29 июля 2011

Решение Мэнни, но немного более общее

sed 's/\([A-Z]\)[A-Z]*/\1/g' my_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...