умножить два столбца (с разделителями), используя Bash - PullRequest
1 голос
/ 25 апреля 2020

Я очень доволен c с помощью awk, поэтому, пожалуйста, помогите мне с этим. У меня есть три столбца, которые выглядят так:

ccd_x29807 Gly_GCC_89 0.333333
ccd_x29807 Gly_GCC_87 0.333333
ccd_x29807 Gly_GCC_88 0.333333
ccd_x20463 Lys_CTT_122 1

Что я хочу сделать, это умножить значения (после x) в первом столбце на числа в третьем столбце и напечатать в другом столбце , Таким образом, результат должен выглядеть следующим образом:

ccd_x29807 Gly_GCC_89 0.333333 9935.656731
ccd_x29807 Gly_GCC_87 0.333333 9935.656731
ccd_x29807 Gly_GCC_88 0.333333 9935.656731
ccd_x20463 Lys_CTT_122 1 20463

Я пробовал это, но в первом столбце ставится 0: cat file.csv | awk '{split($1,arr,"_");$1=arr[2] * $3 }1'

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Здесь вы можете использовать строковые функции match(), чтобы получить местоположение x в поле-1, а затем substr(), чтобы извлечь число, начинающееся после 'x', и сохранить его в переменной (n ). Затем просто выведите всю запись и добавьте дополнительное поле, рассчитанное по n * $3. Например:

awk '{n = substr($1, match($1, /x/) + 1); print $0, n * $3}' file

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

Пример вывода

ccd_x29807 Gly_GCC_89 0.333333 9935.66
ccd_x29807 Gly_GCC_87 0.333333 9935.66
ccd_x29807 Gly_GCC_88 0.333333 9935.66
ccd_x20463 Lys_CTT_122 1 20463

Дайте мне знать, если у вас есть дополнительные вопросы.

1 голос
/ 25 апреля 2020

Вместо x вместо.

$ awk 'BEGIN{OFMT="%.6f"} {split($1,arr,"x");print $0,arr[2]*$3}' file
ccd_x29807 Gly_GCC_89 0.333333 9935.656731
ccd_x29807 Gly_GCC_87 0.333333 9935.656731
ccd_x29807 Gly_GCC_88 0.333333 9935.656731
ccd_x20463 Lys_CTT_122 1 20463
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...