PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash mehrere Dateilisten miteinander vergleichen



ProfBunny
18-10-2008, 10:52
Hi Leute,

um bei meinen mp3 cds fürs auto den überlbick zu behalten, hab ich mir ein kleines script gebastelt



#!/bin/sh
set -x
echo -n "Title of the CD? "
read CDTITLE
/bin/mount /cdrom/ && /bin/ls -1 /cdrom > $CDTITLE.txt && /bin/umount /cdrom/ && eject
#ls -1 /home/profbunny/mp3/ > mp3dir.lst

#cat *.txt |sort -d |uniq > cd.lst
#echo "verwendete Alben filtern"
#comm -3 mp3dir.lst cd.lst |sort -d > rest.lst


das klappt auch, das erstellt mir sozusagen


profbunny@sysiphus:~/source/mp3daten$ l
insgesamt 36K
-rw-r--r-- 1 profbunny profbunny 289 18. Okt 11:28 CD1.txt
-rw-r--r-- 1 profbunny profbunny 256 18. Okt 11:28 CD2.txt
-rw-r--r-- 1 profbunny profbunny 244 18. Okt 11:29 CD3.txt
-rw-r--r-- 1 profbunny profbunny 219 18. Okt 11:30 CD4.txt
-rw-r--r-- 1 profbunny profbunny 336 18. Okt 11:31 CD5.txt
-rw-r--r-- 1 profbunny profbunny 317 18. Okt 11:32 CD6.txt
-rw-r--r-- 1 profbunny profbunny 239 18. Okt 11:32 CD7.txt
-rw-r--r-- 1 profbunny profbunny 149 18. Okt 11:33 CD8.txt


jetzt würde ich diese cds am liebsten untereinander vergleichen, um festzustellen ob ich nicht auf mehreren cds das selbe album habe. jemand ne idee wie ich das am besten prüfe?

danke

jan61
20-10-2008, 19:17
Moin,

da würde ich so vorgehen:
1. Aus den n Textdateien eine bauen, die in jeder Zeile zusätzlich die CD enthält.
2. diese Datei dann nach den Alben sortieren
3. dann aufeinanderfolgende gleiche Alben suchen und ausgeben.

Beispiel:

for cd in CD*.txt; do
# am Zeilenanfang den Namen der CD einfügen, alles in eine Ausgabedatei
sed 's/^/'"`basename $cd .txt`"'|/' $cd >>gesamtliste.txt
done
# sortieren nach Album, dann an awk verfuettern
sort -k2 -t '|' gesamtliste.txt | awk -F'|' ' BEGIN { prev_album = ""; cds = ""; dbl_found = 0; }
$2 == prev_album { cds = cds " " $1; dbl_found = 1; }
$2 != prev_album { if (dbl_found == 1) print prev_album, ": ", cds; cds = $1; dbl_found = 0; }
{ prev_album = $2; }
END { if (dbl_found == 1) print prev_album, ": ", cds; } '
Hm, scheint zu klappen:
jan@jack:~/tmp/cd_liste> cat gesamtliste.txt
CD1|Jailbreak
CD1|Highway to hell
CD1|Back In Black
CD1|Ballbreaker
CD1|Big Gun
CD2|Highway to hell
CD2|Big Gun
CD2|Blow Up Your Video
CD2|Dirty Deeds Done Dirt Cheap
CD3|Live in the USA
CD3|Back In Black
CD3|Ballbreaker
CD3|Flick Of The Switch
CD3|Fly On The Wall
CD3|High Voltage
CD3|If You Want Blood
CD3|Stiff Upper Lip
CD3|Who Made Who
CD4|Jailbreak
CD4|Blow Up Your Video
CD4|Dirty Deeds Done Dirt Cheap
CD4|Powerage
CD4|Stiff Upper Lip
jan@jack:~/tmp/cd_liste> sort -k2 -t '|' gesamtliste.txt | awk -F'|' ' BEGIN { prev_album = ""; cds = ""; dbl_found = 0; }
$2 == prev_album { cds = cds " " $1; dbl_found = 1; }
$2 != prev_album { if (dbl_found == 1) print prev_album, ": ", cds; cds = $1; dbl_found = 0; }
{ prev_album = $2; }
END { if (dbl_found == 1) print prev_album, ": ", cds; } '
Back In Black : CD1 CD3
Ballbreaker : CD1 CD3
Big Gun : CD1 CD2
Blow Up Your Video : CD2 CD4
Dirty Deeds Done Dirt Cheap : CD2 CD4
Highway to hell : CD1 CD2
Jailbreak : CD1 CD4
Stiff Upper Lip : CD3 CD4
Jan