Как использовать Sed / AWK, чтобы сделать математическую арифметику из файла - PullRequest
0 голосов
/ 16 января 2019

У меня есть файл test.txt с несколькими строками, использующими один и тот же шаблон:

a:1;qty=2;px=3;d=4;

a:5;qty=6;px=7;d=8;

a:9;qty=10;px=11;d=12;

И я хотел бы написать простой терминал Linux cmd, используя sed / awk для вычисления (2*3+6*7+10*11)/(2+6+10), что составляет sum(qty*px)/sum(qty).

Могу ли я спросить, как получить значения qty и px в каждой строке, а затем использовать awk для сохранения значений и выполнения окончательного расчета?

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 января 2019

В одну сторону, если нет пустых строк:

awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file

Если присутствуют пустые строки,

awk -F"[=;]" '!/^$/{x+=$3;y+=$3*$5}END{print y/x}' file
0 голосов
/ 16 января 2019

Если ключи не всегда в одном и том же порядке, вы можете сделать

awk -F "[=: ]*" '{ for( i=2; i<=NF;i+=2) a[$i]=$(i+1) }
                 { num += a["px"]*a["qty"]; den+=a["qty"]}
                 END { print num/den }' file
0 голосов
/ 16 января 2019

Если это самый общий шаблон, то следующего oneline должно быть достаточно

cat test.txt | sed 's/[a-zA-Z]*[:=]//g' | awk -F';' '{ s1 += $2*$3; s2 += $2; }; END { print s1/s2; }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...