The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Como Calcular krishna_sicsr Programação Shell Script e 3 03-21-2009 01:49
Simular SVN diff usando plain diff ackbarr Programação Shell Script e 3 02-07-2009 01:01
Como calcular com awk whatisthis Programação Shell Script e 4 11-09-2005 12:39
Como calcular a soma de alguns registros? sickboy Programação Shell Script e 10 06-10-2005 12:43
diff 2 ficheiros; diff da saída para arquivo 3. blt123 Programação Shell Script e 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 Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 02-11-2009
csmklee csmklee is offline
Usuário
  
 

Join Date: Oct 2008
Posts: 3
calcular diff em csv

Eu escrevi uma função para calculcate inteiros diferença em csv.

getSegLatency () (
latências \u003d 0 $ 1
E2E \u003d 0 `echo $ 2 | sed 's / \ ,000000 / / g' `
inteiro segLatency \u003d 0
Um set-arr `echo $ latências | sed 's / \ ,000000 / / g' | sed 's /, / / g' `
res \u003d $ (arr [0])
inteiro i \u003d 1
while ((i <$ (# arr [*]})); fazer
((segLatency \u003d ($ arr [$ i]) - ($ arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
((I \u003d i + 1));
feito
((segLatency \u003d $ E2E - $ (arr [$ i - 1 ]}));
res \u003d "$ res, $ segLatency"
echo $ res
)

em que o número de elementos pode variar de 1 dólar
Por exemplo, quando eu chamo, como:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
I'll get:
3,2,1,4

Funciona bem, mas o desempenho é lento.

Existe alguma maneira para polonês o script para correr mais rápido?
  #2 (permalink)  
Old 02-11-2009
pludi's Avatar
pludi pludi is online now Forum Staff  
Moderador
  
 

Join Data: dezembro 2008
Localização:. Em
Posts: 1.919

Código:
$ 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ê da stdin ou um arquivo.
  #3 (permalink)  
Old 02-11-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programador, autor
  
 

Join Date: Mar 2007
Localização: Toronto, Canadá
Posts: 2.361
Citação:
Originally Posted by csmklee View Post
Eu escrevi uma função para calculcate inteiros diferença em csv.

Por favor, coloque código dentro de [code] tags.
Citação:
Código:
getSegLatency() {
latencies=0$1
E2E=0`echo $2 | sed 's/\.000000//g'`

Comandos externos são lentos; não há necessidade de sed:


Código:
E2E=0${2%.*}

Citação:

Código:
integer segLatency=0

Não existe nenhum comando padrão inteiro (e é desnecessário).
Citação:

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

Não há necessidade de sed.

Se você estiver usando bash ou ksh93, você pode fazer isso com:


Código:
IFS=,
arr=( $latencies )
IFS=$' \t\n'

Citação:

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

A sintaxe padrão é:


Código:
while [ $i -lt ${#arr[*]} ]; do

Citação:

Código:
((segLatency=${arr[$i]} - ${arr[$i - 1]}));

A sintaxe padrão é:


Código:
segLatency=$(( ${arr[$i]} - ${arr[$i - 1]} ))

Citação:

Código:
res="$res,$segLatency"
(( i = i + 1));

A sintaxe padrão é:


Código:
i=$(( $i + 1 ))

Citação:
Código:
done
((segLatency=$E2E - ${arr[$i - 1]}));

Ver nota anterior.
Citação:

Código:
res="$res,$segLatency"
echo $res
}

em que o número de elementos pode variar de 1 dólar
Por exemplo, quando eu chamo, como:
getSegLatency 1.000000,4.000000,6.000000,7.000000 11.000000
I'll get:
3,2,1,4

Com o seu código de entrada e que, eu tenho:

Código:
01,3,2,1,2

Citação:

Funciona bem, mas o desempenho é lento.

Existe alguma maneira para polonês o script para correr mais rápido?

Parece-me razoavelmente rápido, apesar do uso desnecessário de sed


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


Última edição por cfajohnson; em 02/11/2009 05:20..
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 09:15.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0