One liner (muito dificil, queria ter usado o dc para isso, calcular a
media em pilha mas não sei fazer isso em notação polonesa reversa, se
alguem quiser sera bem vindo)
cut -c250-255 arquivo.txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' |
sed 's/[0-9]*/\/&/;s/:/\n/;s/[0-9]*://g' | tac | tr s ' ' | tr ' ' '+'
| sed 's/+/(/;s/+\//)\//' | bc -l
157 caracteres e 8 pipes ...2 seds, 2 tacs e 3 trs... o_O
para ver a evolução da coisa, basta pegar o exemplo
# lista de valores
$ cut -c6-8 txt
1
2
3
4
5
10
1
# usando o egrep encontramos o numero da ultima linha
# que eh o nosso numero de elementos // importante pra media
$ cut -c6-8 txt | egrep -n '[0-9]*'
1: 1
2: 2
3: 3
4: 4
5: 5
6: 10
7: 1
# invertemos a lista
# Olha ai o nosso 7 em primeiro lugar
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac
7: 1
6: 10
5: 5
4: 4
3: 3
2: 2
1: 1
# agora eu deito tudo numa linha
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' '
7: 1 6: 10 5: 5 4: 4 3: 3 2: 2 1: 1
# bom eu preciso manter o 7 e remover os outros numeros acompanhados de :
# que são numeros de linha irrelevantes
# vou aproveitar e colocar um / na frente do 7 -- sera util no futuro
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' | sed 's/[0-9]*/\/&/;s/
:/\n/;s/[0-9]*://g'
/7
1 10 5 4 3 2 1
# humm o bom e velho tac deixa em uma forma conhecida...
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' | sed 's/[0-9]*/\/&/;s/
:/\n/;s/[0-9]*://g' | tac
1 10 5 4 3 2 1 /7
# removemos uns espacos a mais...
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' | sed 's/[0-9]*/\/&/;s/
:/\n/;s/[0-9]*://g' | tac | tr -s ' '
1 10 5 4 3 2 1 /7
# so falta colocar os parentesis!
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' | sed 's/[0-9]*/\/&/;s/
:/\n/;s/[0-9]*://g' | tac | tr -s ' ' | sed 's/ /(/;s/ \//)\//;s/ /+/g'
(1+10+5+4+3+2+1)/7
# media calculada pelo bc
$ cut -c6-8 txt | egrep -n '[0-9]*' | tac | tr '\n' ' ' | sed 's/[0-9]*/\/&/;s/
:/\n/;s/[0-9]*://g' | tac | tr -s ' ' | sed 's/ /(/;s/ \//)\//;s/ /+/g' | bc -l
3.71428571428571428571
# comparando com a versão em AWK
$ cut -c6-8 txt | awk '{A += $0} END {print A/NR}'
3.71429
# legal... :)
On 5/4/06, Julio Cezar Neves - DATAPREVRJ
<[EMAIL PROTECTED]> wrote:
> Quase one liner...
>
> Soma=$(cut -c250-255 arqlista.txt | paste -sd+ | bc)
> # a Contagem de registros é que atrapalha o one liner:
> QtdReg=$(wc -l arqlista.txt | tr -s ' ' | cut -f2 -d' ')
> echo $((Soma / QtdReg))
>
> Se quiser fazer tudo junto:
> echo $(($(cut -c250-255 arqlista.txt | paste -sd+ | bc) / $(wc -l
> arqlista.txt | tr -s ' ' | cut -f2 -d' ')))
>
> [ ]s,
> Julio (http://www.julioneves.com)
> Lido em um site Português: "O Windows tem um problema de design, é como umas
> calças com a breguilha na parte de trás, por muitos cintos que metam nunca
> ficam seguras."
--
Tiago B Peczenyj
Linux User #405772
# cd /pub
# more beer
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
| Yahoo! Grupos, um serviço oferecido por: | |
|
Links do Yahoo! Grupos
- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
- Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
