The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Hvordan man beregner krishna_sicsr Shell Programmering og Scripting 3 03-21-2009 01:49 PM
Simulér SVN diff bruger plain diff ackbarr Shell Programmering og Scripting 3 02-07-2009 01:01 PM
Hvordan man beregner med awk whatisthis Shell Programmering og Scripting 4 11-09-2005 12:39 PM
Hvordan man beregner en sum af visse registre? sickboy Shell Programmering og Scripting 10 06-10-2005 12:43 PM
OB 2 filer; output OB's til 3. fil blt123 Shell Programmering og Scripting 2 05-28-2002 12:29 PM

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øg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 02-11-2009
csmklee csmklee is offline
Registreret Bruger
  
 

Join Date: oktober 2008
Stillinger: 3
beregne diff i csv

Jeg skrev en funktion til calculcate heltal forskel i csv.

getSegLatency () (
latencies \u003d 0 $ 1
E2e \u003d 0 «echo $ 2 | sed 's / \ ,000000 / / g' `
heltal segLatency \u003d 0
sæt-A ARR `echo $ latencies | sed 's / \ ,000000 / / g' | sed 's /, / / g' `
res \u003d $ (ARR [0])
heltal i \u003d 1
mens ((i <$ (# ARR [*]})); do
((segLatency \u003d $ (ARR [$ i]) - $ (ARR [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
((I \u003d I + 1));
gjort
((segLatency \u003d $ e2e - $ (ARR [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
echo $ res
)

, hvor antallet af elementer i $ 1, kan variere
fx når jeg kalder gerne:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
I'll get:
3,2,1,4

Det fungerer godt, men udførelsen er langsom.

Er der nogen måde at polere script til at køre hurtigere?
  #2 (permalink)  
Old 02-11-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderator
  
 

Join Date: Dec 2008
Placering:. Ved
Stillinger: 1866
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";'
Læser fra stdin eller en fil.
  #3 (permalink)  
Old 02-11-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmør, forfatter
  
 

Join Date: Mar 2007
Beliggenhed: Toronto, Canada
Stillinger: 2361
Citat:
Oprindeligt Indsendt af csmklee View Post
Jeg skrev en funktion til calculcate heltal forskel i csv.

Please sætte kode inde [code] tags.
Citat:
Code:
getSegLatency() {
latencies=0$1
E2E=0`echo $2 | sed 's/\.000000//g'`

Eksterne kommandoer er langsomme, og der er ingen grund til sed:

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

Der er ingen standard kommando heltal (og den er unødvendig).
Citat:
Code:
set -A arr `echo $latencies | sed 's/\.000000//g' | sed 's/,/ /g'`

Ikke behov for sed.

Hvis du bruger bash eller ksh93, kan du gøre det med:

Code:
IFS=,
arr=( $latencies )
IFS=$' \t\n'
Citat:
Code:
res=${arr[0]}
integer i=1
while ((i < ${#arr[*]})); do

Standarden syntaks er:

Code:
while [ $i -lt ${#arr[*]} ]; do
Citat:
Code:
((segLatency=${arr[$i]} - ${arr[$i - 1]}));

Standarden syntaks er:

Code:
segLatency=$(( ${arr[$i]} - ${arr[$i - 1]} ))
Citat:
Code:
res="$res,$segLatency"
(( i = i + 1));

Standarden syntaks er:

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

Se forrige note.
Citat:
Code:
res="$res,$segLatency"
echo $res
}
, hvor antallet af elementer i $ 1, kan variere
fx når jeg kalder gerne:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
I'll get:
3,2,1,4

Med din kode, og at input, jeg får:
Code:
01,3,2,1,2
Citat:

Det fungerer godt, men udførelsen er langsom.

Er der nogen måde at polere script til at køre hurtigere?

Det forekommer rimeligt fængende for mig, på trods af unødig brug af sed

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

Sidst redigeret af cfajohnson; 02-11-2009 på 05:20 PM..
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 09:34 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0