![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
||||
|
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. |
|
|||||
|
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. |
|
||||
|
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.. |
|
|||||
|
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.. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|