Archiv verlassen und diese Seite im Standarddesign anzeigen : dateien vergleichen und differenzen ermitteln
meinereinerseiner
13-06-2001, 14:22
Hi,
ihr allwissenden User - ich hab mal wieder ein Problem:
ich hab 2 dateien mit z.b. folgenden Aufbau:
Dat1:
aaa 100
bbb 103
ccc 20
Dat2:
aaa 104
bbb 99
ccc 20
Als Ergebniss bräuchte ich sowas:
Dat3:
aaa +4
bbb -4
ccc 0
also quasi die differenz der Zahlenwerte 1 u 2.
Hat vielleicht jemand eine Idee, wie mann sowas mit der shell bewerkstelligt?
der tom
[ 13. Juni 2001: Beitrag editiert von: meinereinerseiner ]
jgbauman
13-06-2001, 14:46
Hi,
mit perl oder python ging das sicher einfacher, aber bitte sehr.
#!/bin/bash
sort dat1.txt > t1.txt
sort dat2.txt > t2.txt
(join -j 1 -e 0 -o 1.1 1.2 2.2 t1.txt t2.txt;
join -v 1 -j 1 -e 0 -o 1.1 1.2 2.2 t1.txt t2.txt;
join -v 2 -j 1 -e 0 -o 2.1 1.2 2.2 t1.txt t2.txt ;) | \
sort | \
sed -e "s/\(.*\) \(.*\) \(.*\)/echo \1 \$((\2-\3))/" | \
bash \
> dat3.txt
rm t1.txt t2.txt
meinereinerseiner
13-06-2001, 16:53
Hi,
ich habs mal versucht - hier mein code:
#!/bin/bash
sort dat1.txt > t1.txt
sort dat2.txt > t2.txt
(join -j 1 -e 0 -o 1.1 1.2 2.2 t1.txt t2.txt;
join -v 1 -j 1 -e 0 -o 1.1 1.2 2.2 t1.txt t2.txt;
join -v 2 -j 1 -e 0 -o 2.1 1.2 2.2 t1.txt t2.txt | \
sort | \
sed -e "s/\(.*\) \(.*\) \(.*\)/echo \1 \$((\2-\3))/" | \
bash \
> dat3.txt
rm t1.txt t2.txt
aber das tut nicht - syntax error: unexpected end of file
denke mal, da fehlt noch was, oder
der tom
meinereinerseiner
13-06-2001, 16:56
hmmm - der smiley war nicht grundlos dort - nun tuts
danke
jgbauman
13-06-2001, 21:00
Ich hasse diese automatische Smiley-ersetzung. :-(
meinereinerseiner
13-06-2001, 21:17
ja, sie sind nicht ohne.
aber ich hab mal noch eine frage zum script.
wenn die dateien einen anderen aufbau haben,
was muss ich da ändern, hab mir zwar mal die manpage zu join angesehen, komme damit aber nicht klar.
wie ist das bei z.B.
dat1.txt
-------72 liste1
------131 sub_liste1.2
-----8374 listen3_4
dat1.txt
------172 liste1
------131 sub_liste1.2
-----8374 listen3_4
wobei ein "-" für ein eigentliches leerzeichen steht, aber das stellt der hier nicht richtig dar.
der tom
[ 13. Juni 2001: Beitrag editiert von: meinereinerseiner ]
jgbauman
14-06-2001, 00:34
Bei sort mit -k 2 ergaenzt (sortieren nach der zweiten Spalte).
bei join aus -j 1 -j 2 gemacht (joinen nach der zweiten Spalte)
Aus den .1 und .2 des Ausgabeformats .2 und .1 gemacht. (Da 1. und 2. Spalte vertauscht sind)
bingo
#!/bin/bash
sort -k 2 dat1.txt > t1.txt
sort -k 2 dat2.txt > t2.txt
(join -j 2 -e 0 -o 1.2 1.1 2.1 t1.txt t2.txt;
join -v 1 -j 2 -e 0 -o 1.2 1.1 2.1 t1.txt t2.txt;
join -v 2 -j 2 -e 0 -o 2.2 1.1 2.1 t1.txt t2.txt;) | sort | \
sed -e "s/\(.*\) \(.*\) \(.*\)/echo \1 \$((\2-\3))/" | bash \
> dat3.txt
rm t1.txt t2.txt
meinereinerseiner
14-06-2001, 08:24
danke nochmal - jetzt kann ich dem auch folgen.
der tom
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.