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
enquanto no interior, enquanto loop loop panknil Programação Shell Script e 0 01-07-2008 12:49
Para loop xramm HP-UX 3 10-10-2007 03:20
Embora Loop hemangjani Programação Shell Script e 2 11-02-2006 11:01
de loop munnabhai1 Programação Shell Script e 3 04-06-2006 03:30
como obter a função semelhante no ciclo while ou para loop trynew Programação Shell Script e 3 06-17-2002 12:09

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 08-28-2007
Baghera baghera is offline
Usuário
  
 

Join Date: Aug 2007
Lugares: 23
Apesar de assinante com awk

Oi, tenho recentemente postou noutro discussão iniciada por mim . Mas, em um esforço para tornar o meu script mais bonitas que eu estive pensando abbout enquanto loops.

Dirijo o meu script com o comando:

sh script 4 numbers.txt

E o meu script é assim:


Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1

while columns>0
do
	awk_cmd=`awk '{sum+=$i} END {print "\n" sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

O ponto de todo o script é ter uma lista ($ 2) e produzir $ 1 o número de colunas e, em seguida, imprima a média de cada coluna. Mas eu recebo um erro ao executar o script:

colunas: não encontrado

E não vejo o problema. Talvez haja alguns outros problemas com o script também. Please enlighten me.
  #2 (permalink)  
Old 08-28-2007
robotronic's Avatar
robotronic robotronic is offline Forum Advisor  
Posso brincar com a loucura?
  
 

Join Date: Apr 2002
Local: Itália
Lugares: 370
Em primeiro lugar, a condição teste está errado. Use este:


Código:
while [ "$columns" -gt 0 ]

Em segundo lugar, se quiser passar o "$ i" valor para awk tente o seguinte:


Código:
awk_cmd=`awk -v i=$i '{sum+=i} END {print "\n" sum/NR}'`

  #3 (permalink)  
Old 08-28-2007
Baghera baghera is offline
Usuário
  
 

Join Date: Aug 2007
Lugares: 23
Ok eu fiz como você disse:


Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
	awk_cmd=`awk -v i=$1 '{sum+=$i} END {print sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

Mas então eu recebo este tipo de erro:

>> Sh reader4 4 testfil.txt
awk: erro de sintaxe próximo a linha 1
awk: bailing out perto da linha 1
2 2 1 1
1 1 1 1 |
awk: erro de sintaxe próximo a linha 1
awk: bailing out perto da linha 1
2 2 1 1
1 1 1 1 |
awk: erro de sintaxe próximo a linha 1
awk: bailing out perto da linha 1
2 2 1 1
1 1 1 1 |
awk: erro de sintaxe próximo a linha 1
awk: bailing out perto da linha 1
2 2 1 1
1 1 1 1 |

O que eu quero é que se passa através de cada coluna em cada executado no ciclo while e imprime a média correspondente. Mas eu realmente aprecio a ajuda, fui a alguns fóruns onde você obtém slammered porque, talvez, perguntas estúpidas.
  #4 (permalink)  
Old 08-28-2007
aigles's Avatar
aigles aigles is offline Forum Advisor  
Usuário
  
 

Join Date: Apr 2004
Location: Bordeaux, França
Mensagens: 1.433
Você não precisa do awk_cmd comando:

Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
   	echo "$data" | awk -v i=$1 '{sum+=$i} END {print sum/NR}'
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

Se você quiser mantê-lo, você deve usar o eval comando:

Código:
	awk_cmd="awk -v i=$1 '{sum+=$i} END {print sum/NR}'"
	echo "$data" | eval $awk_cmd

Jean-Pierre.
  #5 (permalink)  
Old 08-28-2007
Baghera baghera is offline
Usuário
  
 

Join Date: Aug 2007
Lugares: 23
Obrigado Jean-Pierre, agora eu não receber quaisquer erros. Mas a saída é estranho.

Se eu tiver a lista:

1
2
1
2

Isto produz:
1 2
1 2

Portanto, a saída deverá ser 1 e 2 (1 1 / 2 e 2 2 / 2), assim:
1
2

Mas em vez Recebo

2
2

Algo está errado com a maneira como eu vou sobre este problema.

echo "$ dados" | awk-vi \u003d $ 1 '(soma + \u003d $ i) END (print soma / NR)'

Existe algo de errado com o uso NR aqui? Mas colocar um número, não parece haver a ajudar. Tentei com 2, mas em vez de NR (a mesma lista, tal como acima), mas ainda fico com:

2
2

Existe um problema com a divisão que estou fazendo?

Edit: Acabei de dados e repetiram o resultado vem em uma linha 1 2 1 2 modo provavelmente tem algo a ver com o meu problema.

Última edição por Baghera; em 08/28/2007 02:50..
  #6 (permalink)  
Old 08-28-2007
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderador
  
 

Join Date: Feb 2005
Localização: Boston, MA
Mensagens: 5.131
Eu não entendo porque você precisa de calma toda a codificação quando você pode fazer tudo isso em awk:

nawk-f bag.awk myfile

bag.awk:

Código:
{
   for(i=1; i<=NF; i++)
       sum[i] += $i
   nf=NF
   nr=NR
}

END {
    for(i=1; i<=nf; i++)
        print sum[i]/nr
}


Última edição por vgersh99; em 08/28/2007 03:14..
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 10:26.


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