![]() |
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.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
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. |
|
||||
|
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 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) ... |
|
||||
|
Citat:
Ä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] |