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
Slik Calculate krishna_sicsr Shell programmering og Skripting 3 03-21-2009 01:49
Simuler SVN diff med vanlig diff ackbarr Shell programmering og Skripting 3 02-07-2009 01:01
Hvordan regne med awk whatisthis Shell programmering og Skripting 4 11-09-2005 12:39
Hvordan beregne en sum av enkelte poster? sickboy Shell programmering og Skripting 10 06-10-2005 12:43
diff 2 filer; output diff står til 3. fil blt123 Shell programmering og Skripting 2 05-28-2002 12:29

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-11-2009
csmklee csmklee is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Innlegg: 3
beregne diff i csv

Jeg skrev en func til calculcate heltall forskjell i csv.

getSegLatency () (
latencies \u003d 0 $ 1
E2E \u003d 0 `echo $ 2 | sed 's / \ ,000000 / / g' `
heltall segLatency \u003d 0
set-A arr `echo $ latencies | sed 's / \ ,000000 / / g' | sed 's /, / / g' `
res \u003d $ (arr [0])
heltall i \u003d 1
while ((i <$ (# arr [*]})); gjøre
((segLatency \u003d $ (arr [$ i]) - (arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
((I \u003d i + 1));
ferdig
((segLatency \u003d $ E2E - $ (arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
echo $ res
)

der antallet elementer i $ 1, kan variere
f.eks når jeg ringer ut:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
Jeg får:
3,2,1,4

Det fungerer bra, men ytelsen er treg.

Er det noen måte å polsk skriptet til å kjøre fortere?
  #2 (permalink)  
Old 02-11-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderator
  
 

Bli Dato: desember 2008
Sted:. Ved
Innlegg: 1964

Code:
$ perl -ne '@times=split /,/; for ($i=1;$i<$#times;$i++){print $times[$i]-$times[$i-1],",";}print $times[$i]-$times[$i-1]; print "\n";'

Leser fra stdin eller en fil.
  #3 (permalink)  
Old 02-11-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmerer, forfatter
  
 

Bli Date: Mar 2007
Bosted: Toronto, Canada
Innlegg: 2380
Sitat:
Originally Posted by csmklee View Post
Jeg skrev en func til calculcate heltall forskjell i csv.

Vennligst legg koden inni [kode] koder.
Sitat:
Code:
getSegLatency() {
latencies=0$1
E2E=0`echo $2 | sed 's/\.000000//g'`

Eksterne kommandoer er trege, det er ikke behov for noe sed:


Code:
E2E=0${2%.*}

Sitat:

Code:
integer segLatency=0

Det er ingen standard kommando heltall (og det er unødvendig).
Sitat:

Code:
set -A arr `echo $latencies | sed 's/\.000000//g' | sed 's/,/ /g'`

Ikke behov for sed.

Hvis du bruker bash eller ksh93, kan du gjøre det med:


Code:
IFS=,
arr=( $latencies )
IFS=$' \t\n'

Sitat:

Code:
res=${arr[0]}
integer i=1
while ((i < ${#arr[*]})); do

Standarden syntaks er:


Code:
while [ $i -lt ${#arr[*]} ]; do

Sitat:

Code:
((segLatency=${arr[$i]} - ${arr[$i - 1]}));

Standarden syntaks er:


Code:
segLatency=$(( ${arr[$i]} - ${arr[$i - 1]} ))

Sitat:

Code:
res="$res,$segLatency"
(( i = i + 1));

Standarden syntaks er:


Code:
i=$(( $i + 1 ))

Sitat:
Code:
done
((segLatency=$E2E - ${arr[$i - 1]}));

Se forrige notat.
Sitat:

Code:
res="$res,$segLatency"
echo $res
}

der antallet elementer i $ 1, kan variere
f.eks når jeg ringer ut:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
Jeg får:
3,2,1,4

Med koden, og at skriving, får jeg:

Code:
01,3,2,1,2

Sitat:

Det fungerer bra, men ytelsen er treg.

Er det noen måte å polsk skriptet til å kjøre fortere?

Det synes rimelig irritabel til meg, til tross for unødvendig bruk av sed


Code:
getSegLatency() {
  IFS=,
  set -- $*
  IFS=$' \t\n'
  result=$(
    while [ $# -ge 2 ]
    do
      printf "%d," $(( (${1%.*} - ${2%.*}) * -1 ))
      shift
   done )
   printf "%s\n" ${result%,}
}


Sist endret av cfajohnson; 02-11-2009 på 05:20..
Closed Thread

Hugseliste

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:27.


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