![]() |
|
|
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 |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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 |
|
|||||
|
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. |
|
||||
|
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. |
|
||||
|
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. |
![]() |
| Marcadores |
| Tags |
| solaris |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|