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
comparar dois arquivos e remover a correspondência linhas em ambos os arquivos shellscripter Programação Shell Script e 4 06-20-2009 09:48
matching string em dois arquivos de diferentes comprimento ad_meis Programação Shell Script e 2 05-19-2009 11:49
Alinhamento e combinando dois arquivos sickboy Programação Shell Script e 3 07-17-2008 01:20
Alinhamento e combinando dois arquivos p3t3r Programação Shell Script e 5 05-20-2008 11:16
Encontre correspondência entre as linhas 2 ficheiros jojojmac5 UNIX para Dummies Perguntas & Respostas 5 01-18-2007 01:06

Reply
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 07-01-2009
kylle345 kylle345 is offline
Usuário
  
 

Join Date: May 2009
Lugares: 53
Correspondência de 2 ficheiros

Oi,

Sou capaz de modificar arquivos (um arquivo), mas eu tenho um tempo duro trabalhar com múltiplos arquivos simultaneamente.

Então, eu tenho dois arquivos. Basicamente eu quero corresponder dois arquivos com base em determinadas colunas. Ambos os ficheiros estão guia-seperated.

Ficheiro1 aspecto:

Código:
num1  89  george
num4  78  bob

Arquivo 2 é um arquivo muito maior e parece somethign como este:

Código:
num1  3    lion
num1  13  tiger
num1  84  bear
num4  3    house
num4  19  dog
num4  77  mouse

Então o que eu quero fazer é igualar Files1 da coluna 1 e 2. Também quero subtrair coluna 2 de ambos os arquivos. Portanto, se eles são um jogo, eu quero imprimir (em um arquivo separado) a linha com a menor diferença para a coluna 2.

Portanto, para o meu exemplo acima, o arquivo de saída seria semelhante a essa

num1 5 george urso
num4 1 bob rato


obrigado

Última edição por Yogesh Sawant; em 07/05/2009 11:29.. Motivo: adicionado código tags
  #2 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Usuário
  
 

Join Date: Aug 2004
Localização: Índia
Posts: 379
O que você tentou até agora?
  #3 (permalink)  
Old 07-02-2009
lathavim lathavim is offline
Usuário
  
 

Join Date: Jun 2009
Lugares: 73
Veja se isso ajuda.

Código:
while read value1
do
a=`echo $value1 | cut -d ' ' -f1`
b=`echo $value1 | cut -d ' ' -f2`
c=`echo $value1 | cut -d ' ' -f3`
while read value2
do
a1=`echo $value2 | cut -d ' ' -f1`
b1=`echo $value2 | cut -d ' ' -f2`
c1=`echo $value2 | cut -d ' ' -f3`
if [ "$a" = "$a1" ]
then
b2=`expr $b - $b1`
echo $a $b2 $c $c1 >>outfile
fi
done<file2
done <file1
sort -o outfile2 -2 outfile
while read out1
do
x=`echo $out1 | cut -d ' ' -f1`
grep $x outfile2 | head -1 >>finalout
grep -v $x outfile2 >tmp
mv tmp outfile2
done<outfile2


Última edição por Yogesh Sawant; em 07/05/2009 11:28.. Motivo: adicionado código tags
  #4 (permalink)  
Old 07-02-2009
palsevlohit_123 palsevlohit_123 is offline
Usuário
  
 

Join Date: Aug 2008
Localização: Portugal-Chennai
Lugares: 120
Experimente isto ...



Código:
while read value1
do
        a=`echo $value1 | cut -d ' ' -f1`
        b=`echo $value1 | cut -d ' ' -f2`
        c=`echo $value1 | cut -d ' ' -f3`
        x=`grep "$a" file2|sort -nr -k2,2|head -1|cut -d' ' -f1`
        y=`grep "$a" file2|sort -nr -k2,2|head -1|cut -d' ' -f2`
        z=`grep "$a" file2|sort -nr -k2,2|head -1|cut -d' ' -f3`
        Diff=`expr $b - $y`
        echo "$a $Diff $c $z" >>outfile
done <file1

Nota:
ficheiro1 - o seu primeiro arquivo
ficheiro2 - o segundo arquivo
OUTFILE - o resultado arquivo
  #5 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Usuário
  
 

Join Date: Aug 2004
Localização: Índia
Posts: 379
Eu tinha a solução pronta, mas queria que você dê-lhe uma tentativa ...

Código:
find_corresponding_least_val()
{
   cat file2 | grep "$_key" | awk '{
      if((val-$2) < _diff) {
         _diff=val-$2; args=$3
      }
      else
         _diff=val-$2
   }
      END {
         printf("%s\t%s\t%s\n", key, _diff, args)
   }' key="$_key" val="$_val"
}

while read line
do
   _key=`echo $line | awk '{print $1}`
   _val=`echo $line | awk '{print $2}`
   _args=`echo $line | awk '{print $3}`
   find_corresponding_least_val $_key $_val
done < file1

Reply

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:23.


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