манипулирование столбцами в текстовом файле в awk - PullRequest
0 голосов
/ 24 ноября 2018

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

это пример моего файла:

chr1    144520803   144520804   12  chr1        144520813   58
chr1    144520840   144520841   12  chr1        144520845   36
chr1    144520840   144520841   12  chr1        144520845   36
chr1    144520848   144520849   14  chr1        144520851   32
chr1    144520848   144520849   14  chr1        144520851   32

Я хочу изменить столбец 4th.на самом деле я хочу divide каждый элемент в столбце 4th на sum всех элементов в 4th column, а затем умножить на 1000000.как ожидаемый результат.

expected output:

chr1    144520803   144520804   187500  chr1        144520813   58
chr1    144520840   144520841   187500  chr1        144520845   36
chr1    144520840   144520841   187500  chr1        144520845   36
chr1    144520848   144520849   218750  chr1        144520851   32
chr1    144520848   144520849   218750  chr1        144520851   32

Я пытаюсь сделать это в awk, используя следующую команду, но она не возвращает то, что я хочу.Вы знаете, как это исправить:

awk '{print $1 "\t" $2 "\t" $3 "\t" $4/{sum+=$4}*1000000 "\t" $5 "\t" $6 "\t" $7}'  myfile.txt > new_file.txt

1 Ответ

0 голосов
/ 24 ноября 2018

вам нужно два прохода, один для вычисления суммы, а затем для масштабирования поля

примерно так

$ awk -v OFS='\t' 'NR==FNR {sum+=$4; next}
                           {$4*=(1000000/sum)}1' file{,} > newfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...