The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
sammenligne to filer og fjerne de matchende linjer på både filer shellscripter Shell Programmering og Scripting 4 06-20-2009 09:48 AM
matchende snor i to filer af forskellig længde ad_meis Shell Programmering og Scripting 2 05-19-2009 11:49 AM
Matching og kombinere to filer sickboy Shell Programmering og Scripting 3 07-17-2008 01:20 PM
Matching og kombinere to filer p3t3r Shell Programmering og Scripting 5 05-20-2008 11:16 AM
Find matchende linjer mellem 2 filer jojojmac5 UNIX for dummyer Spørgsmål & svar 5 01-18-2007 01:06 PM

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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 07-01-2009
kylle345 kylle345 is offline
Registreret Bruger
  
 

Join Date: May 2009
Stillinger: 53
Matchende 2 filer

Hej,

Jeg er i stand til at ændre filer (en fil), men jeg har svært ved at arbejde med flere filer samtidig.

Så jeg har to filer. Grundlæggende vil jeg gerne matche to filer baseret på visse kolonner. Begge filer er fanen-seperated.

File1 ser nogenlunde sådan her ud:

Code:
num1  89  george
num4  78  bob

Fil 2 er et meget større fil og ser somethign som denne:

Code:
num1  3    lion
num1  13  tiger
num1  84  bear
num4  3    house
num4  19  dog
num4  77  mouse

Så det, jeg ønsker at gøre, er at matche kolonne 1 fra Files1 og 2. Jeg vil også trække fra kolonne 2 fra begge filer. Så hvis de er en kamp, jeg ønsker at udskrive (i en separat fil) rækken med den mindste forskel for kolonne 2.

Så for mit eksempel ovenfor, outputfilen ville se sådan her ud

num1 5 George bære
num4 1 Bob musen


tak

Sidst redigeret af Yogesh Sawant; 07-05-2009 på 11:29 AM.. Årsag: tilføjet kode tags
  #2 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Registreret Bruger
  
 

Join Date: Aug 2004
Beliggenhed: Indien
Posts: 379
Hvad har du forsøgt så vidt?
  #3 (permalink)  
Old 07-02-2009
lathavim lathavim is offline
Registreret Bruger
  
 

Join Date: Jun 2009
Stillinger: 73
Se om dette hjælper.

Code:
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


Sidst redigeret af Yogesh Sawant; 07-05-2009 på 11:28 AM.. Årsag: tilføjet kode tags
  #4 (permalink)  
Old 07-02-2009
palsevlohit_123 palsevlohit_123 is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Beliggenhed: Indien-Chennai
Stillinger: 120
Prøv dette ...



Code:
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

Bemærk:
file1 - din første fil
fil2 - din anden fil
outfile - resultatet fil
  #5 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Registreret Bruger
  
 

Join Date: Aug 2004
Beliggenhed: Indien
Posts: 379
Jeg havde en løsning klar, men ønsker du at give det en chance ...

Code:
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

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 08:05 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0