Как вычесть некоторые значения в другой строке, используя awk? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть данные, разделенные "|".Эта дата происходит каждые 15 минут.Я хочу вычесть эти данные и умножить их на 100, но, похоже, это не сработало.

bash-4.2$ cat kresna.txt 
2019-05-29 16:48:01||196579|1637589633|0|109423435|101347165|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0||0|0|111|1554983|1554990|0||0|6347782|0|0|0|0|||1637602667|8747|13287295146|283512|1636036853|38771|||326516100|101703893|145340456|6988739|224616616|107247291|7764|101598218|19745231|0
2019-05-29 17:03:01||197446|1637876915|0|109456309|101349847|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0||0|0|111|1552437|1552441|0||0|6336110|0|0|0|0|||1637889948|8747|13290533845|283553|1636326689|38771|||326591972|101734973|145373623|6990480|224660545|107268556|7764|101629298|19748302|0

awk -F "|" '{if(NR>1){print (1 - ($45+$47+$49-_m) / ($44+$46+$48-_n) *100)};_n=$44+$46+$48;_m=$45+$47+$49}' kresna.txt
0.998926

Ожидаемый результат - 99,98

1 Ответ

1 голос
/ 31 мая 2019

Я не вижу проблемы с кодом, за исключением того, что группировка арифметических операндов неверна.Вы хотите выполнить умножение на 100 на значение из деления ранее.Так что просто делайте ниже.Далее избавьтесь от операторов if else как

awk -F "|" 'NR > 1 { print ((1 - ($45+$47+$49-_m) / ($44+$46+$48-_n)) *100)} { _n=$44+$46+$48; _m=$45+$47+$49 }'
99.9989

Даже без printf(), для его печати требуется как минимум 3 прецизионных символа без округления значения до следующего целого числа

awk -F "|" 'NR > 1 { printf "%.3f\n", ((1 - ($45+$47+$49-_m) / ($44+$46+$48-_n)) *100)} { _n=$44+$46+$48; _m=$45+$47+$49 }'
99.999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...