The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Filjämförelse ... hjälp behövs. er_ashu UNIX for Dummies Frågor & Svar 4 05-15-2008 09:37
Jämförelse Unix och Windows-fil sysytem localp UNIX for Dummies Frågor & Svar 1 04-11-2008 04:02
Utdataformat - jämfört med I / P-fil velappangs Shell-programmering och Skript 1 04-03-2008 06:31
Filjämförelse script tiger99 Shell-programmering och Skript 1 01-30-2008 10:47
Arkiv Temne Jämförelse Fråga pc9456 UNIX för avancerade & Expertanvändare 2 07-23-2003 03:05

Closed Thread
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 denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 01-02-2008
net_shree net_shree is offline
Registered User
  
 

Join Date: Dec 2007
Inlägg: 8
Filjämförelse

Jag har att jämföra två textfiler, mycket få av raderna i dessa filer kommer att ha några skillnaden i någon kolumn.
Filerna storlek i GB.
Exempel på linjer som nedan:
11111122222222333333aaaaaaaaaabbbbbbbbbccccccccdddddd
11111122222222333333aaaaaaaaaabbbbbbbbbccccccccddeddd

Så antar dessa två linjer från fil1 och fil2 respektive jag skulle få den andra filen rad i en ny utdatafilen som är skillnaden fil.

Vad jag vill göra är att läsa Line1 från fil1 och loop igenom alla rader i fil2 och sluta när en matchning hittas, annars skriva den linjen att utdatafilen. Och upprepa samma steg för alla rader från fil1.

Jag uppskattar all hjälp i detta avseende.
  #2 (permalänk)  
Old 01-02-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: februari 2004
Ort: NM
Inlägg: 5.749
Vad menar du med "stopp när en matchning har hittats", så du läsa mer från fil1 ....
Vill du ha radnumret? Stopp innebär oftast att stänga läsa loop.
  #3 (permalänk)  
Old 01-02-2008
net_shree net_shree is offline
Registered User
  
 

Join Date: Dec 2007
Inlägg: 8
Ja, jag vill avsluta läsa loop när en matchning hittas, jag vill inte se något mer för den linjen.
Nej jag behöver inte radnumret.
  #4 (permalänk)  
Old 01-02-2008
dislusive dislusive is offline
Registered User
  
 

Join Date: Jan 2008
Location: Pittsburgh, PA
Inlägg: 2
Om jag förstår vad du försöker göra rätt, här är en snabb bash script.

Kod:
#!/bin/bash

compareFile = "/path/to/file/to/compare.txt"
outputFile = "/path/to/outputFile.txt"

for filename in /some/dir/of/text/files/*.txt; do 
        
        numlines=`cat $filename | wc -l`
                
        for i in `seq 1 $numlines`; do 
                current=`cat $filename | head -$i | tail -1` 
 
                grep -q "${current}" ${compareFile} 
 
                if [ $? != 0 ]; then
                         #doesn't exist, append to $outputFile
                        echo "${filename}:${current}" >> ${outputFile} 
                fi
        done 
done
  #5 (permalänk)  
Old 01-02-2008
net_shree net_shree is offline
Registered User
  
 

Join Date: Dec 2007
Inlägg: 8
Hej, Tack för snabb lösning och ser ut ungefär vad jag vill.
Men jag kan inte köra script, jag använder ksh.
Ett av felen är "följande: kommando hittades inte"
  #6 (permalänk)  
Old 01-02-2008
dislusive dislusive is offline
Registered User
  
 

Join Date: Jan 2008
Location: Pittsburgh, PA
Inlägg: 2
som följande (normalt är bosatt i / usr / bin /)

Det är en individuell körbara befäl, bör vara en del av coreutils paketet om du använder Linux.

om den finns på ditt system, ändra skriptet
seq \u003d "/ sökväg / till / seq"

sedan ändra det för förklaring att använda variabel: för att jag i "$ (följande) ...
  #7 (permalänk)  
Old 01-02-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Inlägg: 2.527
Citat:
Ursprungligen postat av dislusive View Post
Om jag förstår vad du försöker göra rätt, här är en snabb bash script.

Kod:
#!/bin/bash

compareFile = "/path/to/file/to/compare.txt"
outputFile = "/path/to/outputFile.txt"

for filename in /some/dir/of/text/files/*.txt; do 
        
        numlines=`cat $filename | wc -l`
                
        for i in `seq 1 $numlines`; do 
                current=`cat $filename | head -$i | tail -1` 
 
                grep -q "${current}" ${compareFile} 
 
                if [ $? != 0 ]; then
                         #doesn't exist, append to $outputFile
                        echo "${filename}:${current}" >> ${outputFile} 
                fi
        done 
done
Som nämndes i OP, filerna i GB. Jag tror det kommer att bli några resultat fördröjning. bara en gissning.
Även följande är inte ett vanligt kommando i vissa * nix OS. Därför, om du vill använda loopar som slinga över en räknare, ett tag loop kan användas i stället. t.ex. medan [$ num-le $ numlines]
Closed Thread

Komihåglista

Taggar
linux

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 08:04.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0