Добавить процент к столбцу в тексте с разделителями табуляции - PullRequest
0 голосов
/ 10 мая 2018

Как добавить этот столбец в процентах, если впереди несколько столбцов

Как показано ниже

Ref Alt Ref_count   Alt_Count   Per (%) Func    Ge
TGA T   2   2       ab  PRKCZ
TGA c   6   6       ab  PRKCZ
TGA C   8   7       ab  PRKCZ
TGA T   9   3       ab  PRKCZ
TGA C   9   3       ab  PRKCZ
TGA T   9   3       ab  PRKCZ
TGA C   9   5       ab  PRKCZ
TGA T   9   3       ab  PRKCZ
TGA C   5   2       ab  PRKCZ
TGA T   4   3       ab  PRKCZ

И вычислить процентное соотношение столбца 4 к столбцу 3. Сохранение других столбцов и заголовков без изменений

Вывод должен выглядеть следующим образом

Ref Alt Ref_count   Alt_Count   Per (%) Func    Ge
TGA T   2   2   100.00% ab  PRKCZ
TGA c   6   6   100.00% ab  PRKCZ
TGA C   8   7   87.50%  ab  PRKCZ
TGA T   9   3   33.33%  ab  PRKCZ
TGA C   9   3   33.33%  ab  PRKCZ
TGA T   9   3   33.33%  ab  PRKCZ
TGA C   9   5   55.56%  ab  PRKCZ
TGA T   9   3   33.33%  ab  PRKCZ
TGA C   5   2   40.00%  ab  PRKCZ
TGA T   4   3   75.00%  ab  PRKCZ

Я использовал команду по ссылке Как добавить столбец в процентах

awk 'NR == FNR {a =a + $ 2; следующий} {c = ($ 2 / a) * 100; вывести $ 1, $ 2, c} 'file file

Но он возвращает только три столбца, а не оставшиеся данные.Выход ниже

Ref_count   Alt_Count   0
2   2   0.00968429
6   6   0.0290529
8   7   0.033895
9   3   0.0145264
9   3   0.0145264
9   3   0.0145264
9   5   0.0242107
9   3   0.0145264
5   2   0.00968429
4   3   0.0145264

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы также можете использовать следующую команду awk, даже если Джеймс Браун ответ лучше

awk 'NR==1{print}NR>1{per=($4/$3*100); printf "%s\t%s\t%s\t%s\t%2f%%\t%s\t%s\n",$1,$2,$3,$4,per,$5,$6}' inputF | column -t
Ref  Alt  Ref_count  Alt_Count  Per          (%)  Func   Ge
TGA  T    2          2          100.000000%  ab   PRKCZ
TGA  c    6          6          100.000000%  ab   PRKCZ
TGA  C    8          7          87.500000%   ab   PRKCZ
TGA  T    9          3          33.333333%   ab   PRKCZ
TGA  C    9          3          33.333333%   ab   PRKCZ
TGA  T    9          3          33.333333%   ab   PRKCZ
TGA  C    9          5          55.555556%   ab   PRKCZ
TGA  T    9          3          33.333333%   ab   PRKCZ
TGA  C    5          2          40.000000%   ab   PRKCZ
TGA  T    4          3          75.000000%   ab   PRKCZ

Пояснение:

  • NR==1{print} печатает 1-ю строку
  • {per=($4/$3*100); printf "%s\t%s\t%s\t%s\t%2f%%\t%s\t%s\n",$1,$2,$3,$4,per,$5,$6} используется для вычисления отношения 4-го / 3-го столбца, а затем распечатывает результат, используя функцию printf, чтобы получить необходимое количество десятичных дробей, чтобы все были разделены табуляцией. Вы можете использовать команду column для хорошего отображения.
0 голосов
/ 10 мая 2018

Использование column для выравнивания столбцов:

$ awk 'BEGIN{FS=OFS="\t"}NR>1{$5=sprintf("%.2f%",$4/$3*100 )}1' file | column -t -s $'\t'
Ref  Alt  Ref_count  Alt_Count  Per (%)  Func Ge
TGA  T    2          2          100.00%  ab   PRKCZ
TGA  c    6          6          100.00%  ab   PRKCZ
TGA  C    8          7          87.50%   ab   PRKCZ
TGA  T    9          3          33.33%   ab   PRKCZ
TGA  C    9          3          33.33%   ab   PRKCZ
TGA  T    9          3          33.33%   ab   PRKCZ
TGA  C    9          5          55.56%   ab   PRKCZ
TGA  T    9          3          33.33%   ab   PRKCZ
TGA  C    5          2          40.00%   ab   PRKCZ
TGA  T    4          3          75.00%   ab   PRKCZ

Разъяснения:

awk '
BEGIN { FS=OFS="\t" }                # have and keep tab as field delimiter
NR>1 {                               # dont process header line
    $5=sprintf("%.2f%%",$4/$3*100 )  # use sprintf to control decimals
}1' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...