The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Unix: mail sending problemet .. pls hjelpe meg snart bobprabhu UNIX for Dummies Spørsmål og svar 2 02-01-2008 05:44
Unix Login Issue freakygs UNIX for Advanced & ekspertbrukere 1 01-16-2008 08:21
Problem med Unix cat kommandoen RcR Shell programmering og Skripting 13 10-31-2007 05:54
Unix-kommandoen mmin problemet Mohee UNIX for Dummies Spørsmål og svar 1 08-30-2007 11:41
Unix i et Windows-miljø problemet Aisha Sturkey UNIX for Dummies Spørsmål og svar 6 05-02-2005 10:44

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 02-12-2008
thambi thambi is offline
Registrert bruker
  
 

Bli Date: Mar 2007
Innlegg: 32
Question Unix Arithmatic drift problemet Datatypen problemet

Hei,
Jeg har et shell scripting. Dette tar 7-sifret tall i hver linje og legger 7-sifret tall med neste påfølgende linjer (normal tillegg).

F.eks:

0000001
0000220
0001235
0000022
0000023
...........
.........
........


Som dette jeg har rundt 1500000 poster. Etter å legge til, får jeg resultatet 2147483647 men faktiske resultatet er 2156379608. Jeg fant det rot årsak til dette problemet er at Unix temproary variabel kan inneholde bare 2156379608 (Utvalg av heltall) så det er 32 bit. For eksempel:

A \u003d 2147483647
expr $ a + 2

du får negativt resultat. Fordi mens expr arbeider, vil resultatet bli lagret i det interne midlertidige variabel eller registrere deg så får du resultatet .. men at spesielle midlertidige variabel eller registrer rommer kun 2147483647 .. hvis den krysser denne grensen, kan du få useriøs verdien som-ve verdier ... dette er min finiding for dette problemet .. Men jeg vil ha løsning på dette problemet. hvordan du legger til eller gjøre arthimatic opration hvis jeg vil ha resultatet mer enn grensen (2147483647). Jeg mener

A \u003d 2147483647
expr $ a + 2

for jeg trenger å få riktig resultat fremfor-ve verdi.
  #2 (permalink)  
Old 02-12-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Bli Date: Feb 2004
Beliggenhet: NM
Innlegg: 5773
Dette vil håndtere opptil 15 signifcant sifre:
Code:
 awk ' {total+=$0} END { print total} ' file
Dette vil håndtere større tall avhengig av hvilken versjon av bc:
Code:
#/bin/ksh
total=0
while read value
do
    total=$(echo "$value + $total" | bc )
done < file
echo $total
  #3 (permalink)  
Old 02-13-2008
thambi thambi is offline
Registrert bruker
  
 

Bli Date: Mar 2007
Innlegg: 32
Question Svare

Hei,

Takk. Vi er også å bruke awk for arthitmatic drift. Men vi ikke får exepected resultat. Jeg prøvde med koden din også.

$ Awk '(total + \u003d $ 0) END (print totalt)' hash_column_wrong.txt
2.15638e 09

Jeg fikk resultatet i expontial format. Men jeg trenger resultatet med alle siffer. Hvordan oppnå dette?. Da andre metoden som du vist med bc kalkulatoren tar lengre tid å complte. Så jeg tror awk er den beste metoden. I øyeblikket får jeg resultatet som 2.15638e 09. men jeg trenger for å få resultatet like 2156380000. Behage hjelpe meg.

Hilsen,
Thambi
  #4 (permalink)  
Old 02-13-2008
manas_ranjan's Avatar
manas_ranjan manas_ranjan is offline
Registrert bruker
  
 

Bli Dato: juli 2007
Sted: Amsterdam
Innlegg: 177
kan du vennligst gi listen over hash_column_wrong.txt??
  #5 (permalink)  
Old 02-13-2008
thambi thambi is offline
Registrert bruker
  
 

Bli Date: Mar 2007
Innlegg: 32
Svar ..

Som jeg allerede nevnt, den inneholder bare de 7 digiti antallet i hver rad. I likhet med disse, har denne filen rundt 150.000. Vi trenger bare å legge alle radene .. det er alt

0000001
0000343
0000001
0001426
0000001
0000718
0000162
0000103
0000021
0000011
0000016
0000312
0000026
0000031
0000005
0000022
0000001
0000001
0011845
0003713
0000001
0000011
0000001
0000001
0000001
..,.,
........
.......
  #6 (permalink)  
Old 02-13-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Bli Date: Feb 2007
Beliggenhet: Innsbruck, Østerrike
Innlegg: 1886
Bruk awk å forberede filen for bc.

(Awk '(print $ 0 "+ \ \")' bigfile; ekko 0;) | bc

Antar bc bruker vilkårlig presisjon biblioteket, bør du ikke har et problem her.
  #7 (permalink)  
Old 02-13-2008
thambi thambi is offline
Registrert bruker
  
 

Bli Date: Mar 2007
Innlegg: 32
Svar ....

Når jeg kjører under kommando

awk '(print $ 0 "+ \ \")' hash_column_wrong.txt | bc

Jeg har nedenfor unntak ..

bundling plass overskredet på linje 1,
bundling plass overskredet på linje 1,
bundling plass overskredet på linje 1,

er det grunn til \ n tegnet som oppstår enden av linjen?.
Closed Thread

Hugseliste

Tags
bc, store tallene, gawk, summen av kolonnen

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 03:02.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0