У меня есть текстовый файл в следующем формате.strtonum in awk заставляет значения потерять точность
1 0x5212cb03ca115ac0 0x3665fb5f1ac1
2 0x5212cb03ca115cc0 0x3665fb5f1ac7
3 0x5212cb03ca115ea0 0x3665fb5f1acd
4 0x5212cb03ca1160c0 0x3665fb5f1ad3
5 0x5212cb03ca1162a0 0x3665fb5f1ad9
6 0x5212cb03ca1164c0 0x3665fb5f1ade
7 0x5212cb03ca1166a0 0x3665fb5f1ae4
8 0x5212cb03ca1168a0 0x3665fb5f1aea
9 0x5212cb03ca116aa0 0x3665fb5f1af0
10 0x5212cb03ca116ca0 0x3665fb5f1af6
Команда:
awk '{print $1 " "strtonum($2)-0x5212cb03ca115ac0 " "strtonum($3)-0x3665fb5f1ac1 }' output.txt
Вывод, который я получаю приведен ниже.
1 0 0
2 1024 6
3 2048 12
4 2048 18
5 2048 24
6 3072 29
7 4096 35
8 4096 41
9 4096 47
10 5120 53
Если вы видите значения в колонке 2 имеет несколько значений повторяясь. (2048 и 4096) .Это вызвано из-за потери точности при использовании StrToNum
Может кто-то предложить какой-либо метод для достижения но избегайте этой потери точности.
Я думаю, это потому, что числа представлены внутри как плавающая точка, которая содержит только 54 бит мантиссы. – Barmar
Можете ли вы использовать perl вместо awk? Вы можете включить там бигнамы и получить произвольные числа точности. – Barmar
@Barmar уверен, что я могу использовать perl вместо awk, если вы можете сказать мне, как :) – liv2hak