![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
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 Code:
num1 3 lion num1 13 tiger num1 84 bear num4 3 house num4 19 dog num4 77 mouse 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 |
|
||||
|
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 |
|
||||
|
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
file1 - den første filen file2 - den andre filen outfile - resultatet fil |
|
||||
|
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
|
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|