Как изменить определенные строки содержимого столбца, используя bash / shell? - PullRequest
0 голосов
/ 09 июня 2018

У меня файл .txt, глядя, как это (вместе около 400 строк):

lettuceFMnode_1240 J_C7R5_99354_KNKSR3_Oligomycin 81,52

1005 * lettuceFMnode_3755 H_C1R3_99940_KNKSF2_Tubulysin 70
1007 * lettuceFMnode_17813 G_C4R5_80184_KNKS113774F_Tetronasin79.57

lettuceFMnode_69469 J_C11R7_99276_KNKSF2_Nystatin 87.27

Я хочу отредактировать имена во всем 2-м столбце так, чтобы осталась только последняя часть (то есть удалить что-либо до этого, то есть фактически оставить то, что раньшеприходит после последнего _).Я изучал различные решения, используя комбинацию cut и sed, но не мог понять, как должен создаваться код.Буду признателен за любые советы и помощь!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

С помощью sed:

sed 's/ [^ ]*_/ /' file

Заменить первый пробел, затем непробельные символы ([^ ]*), за которыми следует _ с одним пробелом.

0 голосов
/ 09 июня 2018

Вот один из способов:

perl -pe 's/^\S+\s+\K\S+_//'

Для каждой строки ввода (-p) мы выполняем некоторый код (-e ...).

Код выполняет подстановку (s/PATTERN/REPLACEMENT/).

Шаблон соответствует следующему:

  • ^ начало строки
  • \S+ 1 или более непробельных символов (первый столбец)
  • \s+ 1 или более пробельных символов (пробел после первого столбца)
  • \K не обрабатывать сопоставленный текст до тех пор, пока он не станет частью окончательного совпадения
  • \S+ 1 или более непробельных символов (второй столбец)
  • _ подчеркивание

Поскольку + является жадным (соответствует столько символов, скольковозможно), \S+_ будет сопоставлять все до последнего _ во втором столбце.

Поскольку мы использовали \K, только остальная часть шаблона (то есть часть соответствия, которая находится ввторой столбец) заменяется.

Строка замены пуста, поэтому совпадение фактически удаляется.

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