![]() |
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| UNIX & avançada para usuários experientes Especialista-a-Expert. Saiba avançado UNIX, comandos UNIX, Linux, Sistemas Operativos, Administração de Sistemas, Programação, Shell, shell scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD. |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
awk ajudar
Oi
No meu arquivo existem 4 colunas tendo montante campos, mas estou recebendo quantias diferentes usando a seguir a um awk-F "|" '(a + \u003d $ 1 + $ 2 + $ 3 + $ 4) END (printf ( "% f \ n", a))' arquivo 1123337200682,226562 awk 'BEGIN (FS \u003d OFS \u003d"|"} (for (i \u003d 1, i <\u003d NF; i + +) (a + \u003d $ i; n + +)) END (printf ( "% f \ n", a))' arquivo 1123337200684,453613 Obrigado, MR |
|
||||
|
Bem-vindo ao maravilhoso mundo da aritmética de ponto flutuante.
Em primeiro lugar, awk usa ponto flutuante de precisão dupla representação interna de números. O costume da dupla presision limite é de 15 dígitos. Você está imprimindo 19 - você precisa fazer todas elas? Você pode verificar o seu sistema, ela pode fornecer mais de 15. Em seguida, a forma como awk está realizando esses fp acrescenta é possivelmente a fonte do problema. Por US $ 1 + $ 2 ..... provavelmente é armazenar temporariamente valores intermédios e recebendo quantias. O outro ciclo provavelmente não uma simples adição, apenas com uma temperatura de armazenamento variável. Slop na representação de números aumenta à medida que você passar por intermédio valores e importâncias. Quanto mais valores intermédios, o mais possível erro. A outra questão é que tem a chamada atof awk para cada número que lê polegadas O número real armazenado na memória pode não ser exactamente representable na FP, e uma vez que você está trabalhando perto do limite de precisão dupla, a alguns milhares de pequenos erros representa uma mudança na forma de um número inteiro. Não é culpa do awk, que tem a ver com a maneira como números fp trabalho. Você pode tentar escrever um script BC, que, geralmente, faz melhor em grandes números. Você também pode tentar uma simples C app com longas dupla datatypes. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|