Biblia állományok adatbázisba töltése
Beküldte pzoli - 2011, május 28 - 4:25du
Perl-ben talán egyszerűbb lenne feldolgozni a fájlokat, ám maradtam a bash/sed/awk hármasnál a használatuk gyakorlása miatt. Egy könyvtárszerkezetbe található a Biblia könyvekre/fejezetekre bontva szöveges állományba. Feladat a MySQL adatbázisba importálás. A könyvek azonosítása a könyvtárakba megtalálásuk szerinti sorrendjüknek megfelelő.
Adatbázis szerkezet
CREATE TABLE IF NOT EXISTS `bible_igeszakasz` ( `konyv_id` tinyint(4) NOT NULL, `resz` INT(11) NOT NULL, `bekezdes` INT(11) NOT NULL, `igeszakasz` VARCHAR(512) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL, KEY `igeszakasz` (`igeszakasz`(255)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `bible_konyvek` ( `konyv_id` tinyint(4) NOT NULL, `konyv_nev` VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL, `konyv_teljesnev` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL, `szovettseg_id` tinyint(4) NOT NULL, PRIMARY KEY (`konyv_id`), KEY `konyv_nev` (`konyv_nev`,`konyv_teljesnev`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
process.sh
#!/bin/bash k=0 kcs=0 ok="" okcs="" cnt=0 echo "delete from bible_konyvek;" echo "delete from bible_igeszakasz;" for i in `find ./ -name chap*.txt`; do konyvcsoport=`echo $i|grep -o -e '[o|uj]txt'` konyv=`echo $i|grep -o -e '\./\w*/[0-9]*-*[a-z]*'|grep -o -e '[0-9]*-*[a-z]*$'` fejezet=`echo $i|grep -E -o -e 'chap[0-9]*\.txt'` fjz=`echo $fejezet|grep -E -o -e '[1-9][0-9]*'` let fj=$fjz if test "$konyvcsoport" != "$okcs" ; then okcs=$konyvcsoport let kcs+=1 fi if test "$konyv" != "$ok" ; then ok=$konyv let k+=1 let cnt+=1 echo "insert into bible_konyvek (szovettseg_id,konyv_id,konyv_nev) values ($kcs,$k,\"$konyv\");" if [ cnt==10 ] ; then let cnt=0 echo "commit;" fi fi cat $i|iconv -f iso-8859-2 -t utf-8|sed -e 's/ +//g;s/\"/\\"/g'|awk -f mki.awk k=$k f=$fj done
mki.awk
#!/usr/bin/awk -f function val(value){ split(value,a,"=") return a[2] } BEGIN { i=1 } $0!="" { if (rec!="") rec=rec" "$0 else rec=$0 } $0=="" { printf "insert into bible_igeszakasz (konyv_id,resz,bekezdes,igeszakasz) values (%s, %s, %d,\"%s\");\n",val(ARGV[1]),val(ARGV[2]),i,rec i++ rec="" }
futtatás:
./process.sh|gzip>bible.sql.gz
Csatolmány | Méret |
---|---|
bible.zip | 1.92 MB |
- A hozzászóláshoz be kell jelentkezni