awk или sed, чтобы удалить текст после последней цифры в поле - PullRequest
0 голосов
/ 23 октября 2018

В файле tab-delimited ниже я пытаюсь удалить текст после последней цифры в $1.Я попробовал две sed команды и получил близко, но не желаемый вывод.Я не знаю, использую ли я лучший подход.Спасибо:).

файл

chr7:55249071C>T    EGFR
chr7:55242469_55242477delTTAAGAGAAG EGFR

желаемый вывод

chr7:55249071   EGFR
chr7:55242469_55242477  EGFR

сед

sed 's/[0-9]//g' file

chr:C>T EGFR
chr:_delTTAAGAGAAG  EGFR

sed 's/[a-z]//g' file

7:55249071C>T   EGFR
7:55242469_55242477TTAAGAGAAG   EGFR

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Если гарантируется, что ваш ввод содержит только два поля с разделителями табуляции, вы можете использовать это:

sed 's/[^0-9]\+\t/\t/' file
0 голосов
/ 23 октября 2018

Это может сработать для вас (GNU sed):

sed 's/\(.*[0-9]\)\S\+/\1/' file

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

0 голосов
/ 23 октября 2018

Вы можете использовать отрицательный класс символов и привязку для удаления только в конце строки

$ awk 'BEGIN{FS=OFS="\t"} {sub(/[^0-9]+$/, "", $1)} 1' ip.txt
chr7:55249071   EGFR
chr7:55242469_55242477  EGFR
  • BEGIN{FS=OFS="\t"}, чтобы установить разделитель поля ввода и вывода в качестве табуляции
  • sub(/[^0-9]+$/, "", $1) выполнять замену только для первого поля, это значительно упрощает адаптацию к различным полям по сравнению с sed
  • 1 идиоматическим способом печати содержимого $0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...