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
Adicionando colunas de dois arquivos chandra321 Programação Shell Script e 7 05-06-2009 01:11
Comparando as colunas semelhantes em dois arquivos diferentes ragavhere Programação Shell Script e 13 04-16-2008 09:53
Comparando-se as colunas de um quadro comum em dois arquivos ragavhere Sun Solaris 1 04-11-2008 09:41
Comparando as duas colunas de Arquivos ggopal Programação Shell Script e 4 02-21-2007 08:06
Comparando as duas colunas de Arquivos ggopal UNIX & avançada para usuários experientes 1 02-17-2007 04:11

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 06-05-2008
oabdalla oabdalla is offline
Usuário
  
 

Join Date: Jun 2008
Posts: 2
comparando arquivos - adição / subtracção / formating colunas

Tenho dois arquivos:
file1.txt:
FS Total Usado Livre Usado%
/ u01 10000 8000 2000 80%
/ u02 10000 8000 2000 80%
/ u03 10000 8000 2000 80%
/ u04 10000 8000 2000 80%
/ u05 10000 8000 2000 80%
/ u06 10000 8000 2000 80%
/ u07 10000 8000 2000 80%
/ U10 10000 5000 5000 50%

file2.txt:
FS Adj
/ u01 1500
/ u05 500
/ U10 2500

Gostaria de compará-los com a primeira coluna de cada arquivo e criar uma saída de ambos que se parece com o seguinte:

FS Total Used Free-Adj + Adj (Usado + Adj) / Total
-------- --------- --------- --------- ---------
/ u01 10000 9500 500 95%
/ u02 10.000 8.000 2.000 80%
/ u03 10.000 8.000 2.000 80%
/ u04 10.000 8.000 2.000 80%
/ u05 10.000 8.500 1.500 85%
/ u06 10.000 8.000 2.000 80%
/ u07 10.000 7.500 2.500 75%

Observe que todas as linhas de file1.txt estão listados, e na coluna "adj" de file2.txt é adicionado à coluna "Usado" e subtrair da coluna "Livre" da file1.txt apenas se houver um jogo.

Eu era capaz de produzir este relatório apenas após o carregamento desses arquivos em um banco de dados, mas estou certo de que posso fazer isso usando shell script com a sua ajuda.

Obrigado,
Omer
  #2 (permalink)  
Old 06-05-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
viciado
  
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 2.926
Você pode usar algo como isto:
(uso nawk / ou usr/xpg4/bin/awk no Solaris)


Código:
awk 'NR == FNR { 
  sub(/,/, "")
  _[$1] = $2 
  next 
  }
FNR == 1 { 
  printf "%4s %5s %8s %8s %14s\n", 
  "FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
  while (++i < 46) printf "-"
  print ""
  next
  }           
$1 in _ { 
  $3 += _[$1]
  $4 -= _[$1] 
  $5 = $3/$2*100 
  }
{
  printf "%4s %5d %8d %8d %14d%\n",
  $1, $2, $3, $4, $5
  }' file2.txt file1.txt

  #3 (permalink)  
Old 06-06-2008
oabdalla oabdalla is offline
Usuário
  
 

Join Date: Jun 2008
Posts: 2
Obrigado, radoulov, para o seu rápido e elegent script. Ela está funcionando perfeitamente.
Tudo o que preciso fazer agora é formatar o relatório muito bem, por isso, é mais legível, mas acho que posso descobrir isso.

Appreciate it

Omer
  #4 (permalink)  
Old 06-11-2008
vakharia Mahesh vakharia Mahesh is offline
Usuário
  
 

Join Date: Feb 2007
Lugares: 51
Question comparando os arquivos etc

Oi Radoulov,
Li o seu script. Pode eloborate para mim para o conhecimento. Obrigado.
  #5 (permalink)  
Old 06-11-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
viciado
  
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 2.926
Citação:
Originally Posted by vakharia Mahesh View Post
[...]
Can you eloborate para mim para o conhecimento
Certo.


Código:
NR == FNR

A expressão acima retorna true somente durante o processamento do primeiro arquivo de entrada (ficheiro2). Assim, as correspondentes acções são as seguintes:


Código:
{ 
  sub(/,/, "")
  _[$1] = $2 
  next 
  }

Tira os milhares separador, preencherá um array associativo _com $ 1 como chaves, $ 2 como valores, assim determinada a entrada será:


Código:
key -> "/u01" value -> 1500
key -> "/u05" value -> 500
key -> "/u10" value -> 2500

O próximo declaração forças awk para parar o tratamento do registro corrente tão já não há mais regras / acções serão executadas para esse registro. Isto significa que as próximas acções não irá processar o primeiro arquivo de entrada.


Código:
FNR == 1

FNR é o número de registros que tenham sido lidas tão longe do actual ficheiro de entrada (o segundo arquivo de entrada neste caso). Então, ao processar o primeiro registro do segundo arquivo de entrada:


Código:
{ 
  printf "%4s %5s %8s %8s %14s\n", 
  "FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
  while (++i < 46) printf "-"
  print ""
  next
  }

Imprimir o cabeçalho de colunas e vá para o próximo registro.


Código:
$1 in _ { 
  $3 += _[$1]
  $4 -= _[$1] 
  $5 = $3/$2*100 
  }

A expressão chave no array retorna true se o indicado chave existe na indicados array. Para os registros faça o seguinte:
- Adicionar o valor _ [$ 1] da tecla correspondente $ 1 para a terceira coluna
- Subtrair o valor _ [$ 1] da tecla correspondente $ 1 a partir da quarta coluna
- Calcular o valor da quinta coluna


Código:
{
  printf "%4s %5d %8d %8d %14d%\n",
  $1, $2, $3, $4, $5
  }

Imprimir a novos valores.


Hope this helps.
  #6 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Usuário
  
 

Join Date: Feb 2007
Lugares: 51
Thumbs up Comparando Arquivos

SIMPLY Soberbo! NÃO WORDSSSSSSSS será suficiente a sua forma de
EXPLICAR. Bundles DE AGRADECIMENTO DO FUNDO DO MEU HEART.Let-me
somthing é dizer a compreender e explicar com simplicidade, que é mais
cumbersome.Once Thanx novamente.
Cheers Dimitri.
  #7 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Usuário
  
 

Join Date: Feb 2007
Lugares: 51
Thumbs up Comparando Arquivos

Só agora eu ter escrito a resposta, mas não appers, onde,

Caro Radlouv
Feixes de Graças a você para explicar o código de uma maneira muito simples prazo.
De jeito nenhum, mas simplesmente soberba. Nenhuma palavra será suficiente. Sabendo-se de algo
mas para explicar em simples wrods exige grande InSite.

Thanx novamente. Cheers Up.
Closed Thread

Marcadores

Tags
solaris

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 01:32.


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