The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
sammenligne to filer og å fjerne Samsvarene på begge filene shellscripter Shell programmering og Skripting 4 06-20-2009 09:48
samsvarende strengen i to filer av forskjellig lengde ad_meis Shell programmering og Skripting 2 05-19-2009 11:49
Målrettet og kombinere to filer sickboy Shell programmering og Skripting 3 07-17-2008 01:20
Målrettet og kombinere to filer p3t3r Shell programmering og Skripting 5 05-20-2008 11:16
Finn matchende linjer mellom 2 filer jojojmac5 UNIX for Dummies Spørsmål og svar 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 Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 07-01-2009
kylle345 kylle345 is offline
Registrert bruker
  
 

Bli Dato: mai 2009
Innlegg: 46
Matchende 2 filer

Hei,

Jeg er i stand til å endre filer (en fil), men jeg har en hard tid å arbeide med flere filer samtidig.

Så jeg har to filer. Utgangspunktet jeg vil matche to filer basert på bestemte kolonner. Begge filene er tab-seperated.

File1 ser omtrent slik ut:
Code:
num1  89  george
num4  78  bob
Fil 2 er et mye større fil og ser somethign som dette:
Code:
num1  3    lion
num1  13  tiger
num1  84  bear
num4  3    house
num4  19  dog
num4  77  mouse
Så hva jeg vil gjøre, er å matche kolonne 1 fra Files1 og 2. Jeg ønsker også å subtrahere kolonne 2 fra begge filene. Så hvis de er en kamp, jeg vil skrive ut (til en egen fil) raden med den minste forskjell for kolonne 2.

Så for min eksempelet ovenfor, utdatafilen ville se slik ut

num1 5 George bjørn
num4 1 bob mus


takk

Sist endret av Yogesh Sawant; 07-05-2009 på 11:29.. Årsak: lagt til kode tags
  #2 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Registrert bruker
  
 

Bli Dato: Aug 2004
Location: India
Innlegg: 379
Hva har du prøvd så langt?
  #3 (permalink)  
Old 07-02-2009
lathavim lathavim is offline
Registrert bruker
  
 

Bli Dato: juni 2009
Innlegg: 73
Se om dette hjelper.
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

Sist endret av Yogesh Sawant; 07-05-2009 på 11:28.. Årsak: lagt til kode tags
  #4 (permalink)  
Old 07-02-2009
palsevlohit_123 palsevlohit_123 is offline
Registrert bruker
  
 

Bli Dato: Aug 2008
Location: India-Chennai
Innlegg: 120
Prøv denne ...


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
Merk:
file1 - den første filen
file2 - den andre filen
outfile - resultatet fil
  #5 (permalink)  
Old 07-02-2009
rakeshawasthi rakeshawasthi is offline
Registrert bruker
  
 

Bli Dato: Aug 2004
Location: India
Innlegg: 379
Jeg hadde løsningen klar, men ville du skulle prøve ...
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

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 11:23.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0