Biblia állományok adatbázisba töltése

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ányMéret
Csomag ikon bible.zip1.92 MB