The UNIX and Linux Forums  

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
How to calculate krishna_sicsr Programmeren en Shell Scripting 3 03-21-2009 01:49 PM
Simuleren met behulp van SVN diff vlakte diff ackbarr Programmeren en Shell Scripting 3 02-07-2009 01:01 PM
Hoe te berekenen met awk whatisthis Programmeren en Shell Scripting 4 11-09-2005 12:39
Hoe berekent een bedrag van enkele records in? sickboy Programmeren en Shell Scripting 10 06-10-2005 12:43
diff 2 bestanden; uitgang diff's 3e bestand blt123 Programmeren en Shell Scripting 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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 02-11-2009
csmklee csmklee is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2008
Posten: 3
berekenen diff in csv

Ik schreef een functie te calculcate integers verschil in csv.

getSegLatency () (
latenties \u003d 0 $ 1
E2E \u003d 0 "echo $ 2 | sed 's / \ ,000000 / / g' `
integer segLatency \u003d 0
Een set-arr `echo $ latenties | sed 's / \ ,000000 / / g' | sed 's /, / / g' `
res \u003d ($ arr [0])
integer i \u003d 1
while ((i <$ (# arr [*]})); doen
((segLatency \u003d ($ arr [$ i]) - ($ arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
((I \u003d i + 1));
gedaan
((segLatency \u003d $ E2E - ($ arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
echo $ res
)

waarbij het aantal elementen in $ 1 kan variëren
bijvoorbeeld als ik bel zoals:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
Ik krijg je:
3,2,1,4

Het werkt goed, maar de voorstelling is traag.

Is er een manier om Pools het script te draaien sneller?
  #2 (permalink)  
Old 02-11-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderator
  
 

Join Date: december 2008
Locatie: op.
Berichten: 1.972

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";'

Leest van stdin of een bestand.
  #3 (permalink)  
Old 02-11-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmeur, auteur
  
 

Join Datum: maart 2007
Plaats: Toronto, Canada
Berichten: 2380
Citaat:
Oorspronkelijk geplaatst door csmklee View Post
Ik schreef een functie te calculcate integers verschil in csv.

Leg code in [code] tags.
Citaat:
Code:
getSegLatency() {
latencies=0$1
E2E=0`echo $2 | sed 's/\.000000//g'`

Externe commando's zijn traag en er is geen noodzaak voor sed:


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

Citaat:

Code:
integer segLatency=0

Er is geen standaard commando integer (en het is niet nodig).
Citaat:

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

Geen behoefte aan sed.

Als u gebruik maakt van bash of ksh93, kunt u dat doen met:


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

Citaat:

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

De standaard syntax is:


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

Citaat:

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

De standaard syntax is:


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

Citaat:

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

De standaard syntax is:


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

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

Zie vorige noot.
Citaat:

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

waarbij het aantal elementen in $ 1 kan variëren
bijvoorbeeld als ik bel zoals:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
Ik krijg je:
3,2,1,4

Met uw code en die ingang, krijg ik:

Code:
01,3,2,1,2

Citaat:

Het werkt goed, maar de voorstelling is traag.

Is er een manier om Pools het script te draaien sneller?

Het lijkt redelijk pittig voor me, ondanks het onnodig gebruik van sed


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


Laatst gewijzigd door cfajohnson; op 02.11.2009 05:20 PM..
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 10:34 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0