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