![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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 |
|
||||
|
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 |
|
||||
|
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 |
|
||||
|
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
|
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|