User Tools

Site Tools


update-opac.sh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

update-opac.sh [26/06/2007 18:19]
127.0.0.1 editor externo
update-opac.sh [06/05/2009 00:00]
Line 1: Line 1:
-Versión: 2006.11.13 
  
-<code bash> 
-#!/bin/bash 
- 
-# ----------------------------------------------------------------------- 
-# update-opac.sh 
-# 
-# Este script genera el conjunto de bases de datos y archivos 
-# auxiliares utilizados en el OPAC. 
-# 
-# Argumentos: 
-#            $1 nombre de la base 
-#            $2 cantidad de registros a procesar (opcional, es útil para 
-#               ​procesar una cantidad pequeña de registros de una base 
-#               ​grande cuando se hacen pruebas) 
-# 
-# Ejemplos: 
-#         ​update-opac demo 
-#         ​update-opac mibase 500 
-# 
-# 
-# (c) 2003-2006 Fernando J. Gomez - CONICET - INMABB 
-# 
-# ----------------------------------------------------------------------- 
-# 
-# Requiere algunos utilitarios CISIS: mx, msrt, i2id, id2i; para convertir 
-# las bases al "​formato Windows"​ necesita además crunchmf y crunchif. 
-# 
-# La base de origen debe tener la codificación "​ANSI"​ (aka windows-1252,​ 
-# aka latin-1). Las bases creadas con Catalis ya traen esa codificación;​ 
-# bases provenientes de Windows o DOS pueden requerir la conversión,​ por 
-# ejemplo mediante el gizmo oem2ansi. 
-# 
-# Este script por ahora debe permanecer codificado como latin-1. Si usamos 
-# utf-8 tenemos un error de mx al usar el carácter '​¦'​ como delimitador 
-# en los proc. 
-# 
-# Usamos "​seq=filename.id\n"​ para que mx use el carácter de fin de línea como 
-# delimitador de campos (y, en consecuencia,​ no se produzca una indeseada 
-# separacion en campos). 
-# ¿Hay alguna manera de evitar que mx asuma un separador de campos? 
-# 
-# ATENCION: en caso de registros corruptos, es posible que recién 
-# salte un error al usar id2i para recrear la base biblio. 
-# 
-# Este script fue originalmente escrito como un .bat para Windows, 
-# y aún conserva vestigios de ese pasado, a la espera de completar 
-# la traducción. 
-# 
-# ----------------------------------------------------------------------- 
-# 
-# Esta es la estructura del script: 
-# 
-# * configuración 
- 
-# * verificar argumentos recibidos, existencia de bases 
- 
-# * descomprimir archivo .zip con la base 
- 
-# * si tenemos imagenes de tapas, añadimos un campo con esa info 
- 
-# * si tenemos registros de SeCS, los añadimos a la base 
- 
-# * procesamiento de las bases: 
-# BIBLIO_DATABASE_1 
-# SUBJ_DATABASE 
-# NAME_DATABASE 
-# TITLE_DATABASE 
-# BIBLIO_DATABASE_2 
-# FULLINV 
-# POSTINGS 
-# AGREP_DICTIONARIES 
-# ARCHIVOS_AUXILIARES 
-#  
-# * limpieza (borrado de temporales) (opcional) 
- 
-# * movemos los archivos generados al directorio destino (opcional) 
-# 
-# ----------------------------------------------------------------------- 
-# 
-# TO-DO: 
-# 
-# Aceptar como input otras opciones además de un archivo .zip: 
-# archivos biblio.mst + biblio.xrf, archivo .iso, archivo .id, archivo .mrc 
-# 
-# Medir el tiempo de ejecucion del script, y revisar de manera general 
-# su diseño, porque es lento en máquinas viejas con bases grandes. 
-# 
-# ¿Qué hacemos si los registros ya vienen con ^9 en los 
-# campos de encabezamientos?​ 
-# 
-# ========================================================================= 
- 
-# Funciones de error tomadas de install_qemu.sh (ver http://​ubuntuforums.org/​showthread.php?​t=187413) 
- 
-## COLOR ECHO FUNCTION ## 
-cecho() 
-{ 
- if [ "​$1"​ = "​black"​ ]; then 
- echo -ne "​\E[30m"​ 
- elif [ "​$1"​ = "​red"​ ]; then 
- echo -ne "​\E[31m"​ 
- elif [ "​$1"​ = "​green"​ ]; then 
- echo -ne "​\E[32m"​ 
- elif [ "​$1"​ = "​yellow"​ ]; then 
- echo -ne "​\E[33m"​ 
- elif [ "​$1"​ = "​blue"​ ]; then 
- echo -ne "​\E[34m"​ 
- elif [ "​$1"​ = "​magenta"​ ]; then 
- echo -ne "​\E[35m"​ 
- elif [ "​$1"​ = "​cyan"​ ]; then 
- echo -ne "​\E[36m"​ 
- fi 
- 
- echo "​$2"​ "​$3"​ 
- tput sgr0 
-} 
- 
-## ERROR FUNCTION ## 
-error() 
-{ 
- if [ "​$1"​ = ""​ ]; then 
- cecho "​red"​ "​ERROR:​ hubo una falla, con causa desconocida."​ 
- else 
- cecho "​red"​ "​ERROR:​ $1" 
- fi 
- exit 
-} 
- 
- 
-echo 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
-cecho "​blue"​ " ​ update-opac.sh - SCRIPT DE ACTUALIZACION DEL OPAC  " 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
- 
-# ------------------------------------------------------------------ 
-# VERIFICAMOS PRESENCIA DEL PARAMETRO OBLIGATORIO 
-# ------------------------------------------------------------------ 
-if [ "​$1"​ = ""​ ]; then 
- error "Debe indicar el nombre de la base." 
-fi 
- 
-DB_NAME=$1 
- 
- 
-# ------------------------------------------------------------------ 
-# LEEMOS CONFIGURACION 
-# ------------------------------------------------------------------ 
- 
-CONF_FILE=`dirname $0`/​../​conf.sh 
-. $CONF_FILE || error "No se ha encontrado el archivo de configuración $CONF_FILE"​ 
- 
- 
-# ------------------------------------------------------------------ 
-# DEFINIMOS ALGUNAS VARIABLES 
-# ------------------------------------------------------------------ 
- 
-# Directorio de trabajo 
-WORK_DIR=$OPACMARC_DIR/​work/​$DB_NAME 
-if [ ! -d $WORK_DIR ]; then 
- error "No se ha encontrado el directorio de trabajo: $WORK_DIR"​ 
-fi 
- 
-# En este directorio se encuentra la base original ​ 
-SOURCE_DIR=$WORK_DIR/​original 
- 
-# Hay que usar el path *absoluto* para el cipar 
-export CIPAR=$OPACMARC_DIR/​opac/​opac.cip 
- 
- 
-# ------------------------------------------------------------------ 
-# GENERAMOS EL ARCHIVO CIPAR 
-# ------------------------------------------------------------------ 
- 
-# Usamos % como delimitador debido a que $OPACMARC_DIR contiene barras (/)  
-sed "​s%__OPACMARC_DIR__%$OPACMARC_DIR%"​ $CIPAR.dist > $CIPAR || error "No se pudo generar el archivo cipar" 
- 
- 
-# ------------------------------------------------------------------ 
- 
- 
-# Nos ubicamos en el directorio de trabajo 
-cd $WORK_DIR || error "No se puede ingresar al directorio de trabajo, $WORK_DIR"​ 
- 
-# Creamos el directorio temporal, si es necesario 
-if [ ! -d tmp ]; then 
-    mkdir tmp || error "No se pudo crear el directorio tmp" 
-    #cecho "​blue"​ "​Directorio tmp creado."​ 
-fi 
- 
- 
-# La base de datos original puede estar en diversos formatos: 
-#     ​ZIP: ​    ​dbname.zip o biblio.zip (contiene biblio.mst y biblio.xrf) 
-#     ​TGZ: ​    ​dbname.tgz o dbname.tar.gz [PENDIENTE] 
-#     ​MST/​XRF:​ biblio.mst y biblio.xrf 
-#     ​MRC: ​    ​dbname.mrc 
-#     ​ISO: ​    ​dbname.iso o biblio.iso 
-#     ​ID: ​     dbname.id o biblio.id 
-echo 
-if [ -f $SOURCE_DIR/​$DB_NAME.zip ]; then 
- unzip -oq $SOURCE_DIR/​$DB_NAME.zip -d tmp || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​$DB_NAME.zip"​ 
- 
-elif [ -f $SOURCE_DIR/​biblio.zip ]; then 
- unzip -oq $SOURCE_DIR/​biblio.zip -d tmp || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​biblio.zip"​ 
- 
-elif [[ -f $SOURCE_DIR/​biblio.mst && -f $SOURCE_DIR/​biblio.xrf ]]; then 
- cp -f $SOURCE_DIR/​biblio.{mst,​xrf} tmp/ || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​biblio.{mst,​xrf}"​ 
- 
-elif [ -f $SOURCE_DIR/​$DB_NAME.mrc ]; then 
- echo 
- cecho "​blue"​ "​Importando archivo $SOURCE_DIR/​$DB_NAME.mrc..."​ 
- php $OPACMARC_DIR/​bin/​mrc2isis.php $SOURCE_DIR/​$DB_NAME.mrc > tmp/​$DB_NAME.id || error "Falla al ejecutar mrc2isis.php"​ 
- id2i tmp/​$DB_NAME.id create=tmp/​biblio || error "Hubo una falla al ejecutar id2i" 
- 
-elif [ -f $SOURCE_DIR/​$DB_NAME.iso ]; then 
- mx iso=$SOURCE_DIR/​$DB_NAME.iso create=tmp/​biblio now -all || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​$DB_NAME.iso"​ 
- 
-elif [ -f $SOURCE_DIR/​biblio.iso ]; then 
- mx iso=$SOURCE_DIR/​biblio.iso create=tmp/​biblio now -all || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​biblio.iso"​ 
- 
-elif [ -f $SOURCE_DIR/​$DB_NAME.id ]; then 
- id2i $SOURCE_DIR/​$DB_NAME.id create=tmp/​biblio || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​$DB_NAME.id"​ 
- 
-elif [ -f $SOURCE_DIR/​biblio.id ]; then 
- id2i $SOURCE_DIR/​biblio.id create=tmp/​biblio || error 
- cecho "​blue"​ "​Usando como base original: $SOURCE_DIR/​biblio.id"​ 
- 
-else 
- error "No se encuentra la base de datos original"​ 
-fi 
- 
- 
-# El 2do parametro (opcional) indica cuántos registros procesar 
-if [ ! -z $2 ]; then 
-    MAXCOUNT=$2 
-else 
-    MAXCOUNT=999999 
-fi 
- 
-mx tmp/biblio count=$MAXCOUNT create=tmp/​bibliotmp now -all || error "Hubo una falla al ejecutar mx" 
-mv -f tmp/​bibliotmp.mst tmp/​biblio.mst || error 
-mv -f tmp/​bibliotmp.xrf tmp/​biblio.xrf || error 
- 
- 
-# ------------------------------------------------------------------ 
-# Para la base bibima, tenemos que añadir a la base biblio los registros del SeCS 
-# Como input necesitamos:​ 
-#     * base secstitle (la base title de SeCS, en formato linux) 
-#     * archivo EMA.001 (listado de existencias,​ generado desde SeCS) 
-#     * base oem2ansi (el gizmo para cambio de codificación) 
-#     * archivo secs2marc.proc (migración SeCS => MARC21) 
-# ------------------------------------------------------------------ 
-if [ -f $SOURCE_DIR/​$DB_NAME-secstitle.zip ]; then    # testeamos si existe la base secstitle asociada 
- echo 
- cecho "​blue"​ "​Procesando base SECSTITLE..."​ 
-  
- # TO-DO: usar mxcp para eliminar espacios en la base title 
-  
- # paso 0: descomprimimos la base 
- unzip -oq $SOURCE_DIR/​$DB_NAME-secstitle.zip -d tmp || error "No se pudo descomprimir el archivo $SOURCE_DIR/​$DB_NAME-secstitle.zip"​ 
-  
- # paso 1: recodificamos caracteres 
- mx tmp/​secstitle gizmo=OEM2ANSI create=tmp/​title now -all || error "Hubo una falla al ejecutar mx" 
-  
- # paso 2: creamos una base de holdings 
- mx seq=tmp/​EMA.001 create=tmp/​holdings now -all || error "Hubo una falla al ejecutar mx" 
- mx tmp/​holdings "fst=2 0 v2" fullinv=tmp/​holdings || error "Hubo una falla al ejecutar mx" 
-  
- # paso 3: insertamos la información sobre holdings en los registros bibliográficos 
- mx tmp/title "​proc='​a98|',​ref(['​tmp/​holdings'​]l(['​tmp/​holdings'​]v40^c),​v3),'​|'"​ copy=tmp/​title now -all || error "Hubo una falla al ejecutar mx" 
-  
- # paso 4: migramos a MARC 
- mx tmp/title "​proc=@SECS2MARC.PROC"​ create=tmp/​title_marc now -all || error "Hubo una falla al ejecutar mx" 
-  
- # paso 5: añadimos los registros a la base biblio 
- mx tmp/​title_marc append=tmp/​biblio now -all || error "Hubo una falla al ejecutar mx" 
-fi 
-# ------------------------------------------------------------------ 
- 
- 
-# Si hay imágenes de tapa, creamos un campo 985 
-if [ ! -d $DIR_IMG ]; then 
- echo 
- cecho "​blue"​ "No hay directorio de imagenes"​ 
-else 
- echo 
- cecho "​blue"​ "​Procesando imágenes de tapas..."​ 
- ls $DIR_IMG | grep '​00[0-9]\{4\}\.[a-z]\{3\}$'​ > tmp/​lista_img.txt # TO-DO: revisar esta expresión regular 
- mx seq=tmp/​lista_img.txt create=tmp/​lista_img now -all || error "Hubo una falla al ejecutar mx" 
- mx tmp/​lista_img "​proc='​d1a1#',​v1.6,'​^f',​v1*7.3,'#'"​ copy=tmp/​lista_img now -all || error "Hubo una falla al ejecutar mx" 
- mx tmp/​lista_img "fst=1 0 v1^*" fullinv=tmp/​lista_img || error "Hubo una falla al ejecutar mx" 
-  
- # Oct. 19, 2006 
- #ATENCION: tenemos un error en el MFN 4009 de bibima 
- # fatal: recupdat/​mfn 
- # en la base vemos: 
- #     ​004008 ​  ​10^aVariational calculus and optimal con.. 
- #     ​925907264 ​  ​10^aDiscriminants,​ resultants, and multi.. 
- #     ​004010 ​  ​00^aAnalysis on manifolds /^cJames R. Mu..x 
- # pero antes de ejecutar este comando el registro 4009 se ve sano. 
- # Oct. 20, 2006: el problema desaparece al recrear la base usando $MAXCOUNT 
- 
- # Quizás sea mejor hacer un loop sobre los archivos de imagenes y solo acceder a los registros afectados, 
- # en vez de acceder a todos los registros para solo modificar unos pocos 
- mx tmp/biblio "​proc=if l(['​tmp/​lista_img'​]v1) > 0 then '​d985a985!##​^a',​ref(['​tmp/​lista_img'​]l(['​tmp/​lista_img'​]v1),​v1^f),'​!'​ fi" copy=tmp/​biblio tell=$TELL now -all || error "Hubo una falla al ejecutar mx" 
-fi 
- 
- 
-# ------------------------------------------------------------------ 
-# BASE BIBLIO (1ra pasada) 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​Creamos una copia (texto) de la base bibliografica..."​ 
-i2id tmp/biblio tell=$TELL > tmp/​biblio1.id ​    # || error "Hubo una falla al ejecutar i2id" 
-# BUG en i2id: aun sin haber errores, el exit status es diferente de cero (e.g. 17, 19). Se testea con 'echo $?' 
- 
-echo 
-cecho "​blue"​ "​Intentamos normalizar la puntuacion final, filtramos encabezamientos"​ 
-cecho "​blue"​ "​tematicos,​ y asignamos un numero (provisorio) a cada campo" 
-cecho "​blue"​ "de encabezamientos en el subcampo ^9..." 
-mx "​seq=tmp/​biblio1.id\n"​ lw=3000 "​pft=@HEAD.PFT"​ now tell=$TELL > tmp/​biblio2.id || error "Hubo una falla al ejecutar mx" 
- 
- 
-# ------------------------------------------------------------------ 
-# BASE SUBJ 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
-cecho "​blue"​ " Base de encabezamientos tematicos"​ 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
- 
-cecho "​blue"​ "​Creamos el listado de encabezamientos tematicos..."​ 
-mx "​seq=tmp/​biblio2.id\n"​ lw=1000 "​pft=if getenv('​SUBJ_TAGS'​) : v1*1.4 then @SUBJ.PFT fi" now tell=$TELL > tmp/​subj1.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Convertimos el listado en una base (desordenada y con duplicados)..."​ 
-id2i tmp/​subj1.id create/​app=tmp/​subj1 tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
-echo 
-cecho "​blue"​ "​Regularizamos la puntuacion final de los encabezamientos generados..."​ 
-mx tmp/subj1 "​proc='​d2a2¦',​v1,'​¦'"​ "​proc='​d1a1¦',​@REGPUNT.PFT,'​¦'"​ "​proc='​d2'"​ copy=tmp/​subj1 now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Almacenamos en un campo auxiliar la clave de ordenacion..."​ 
-mx tmp/subj1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp/​subj1 now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Ordenamos la base de encabezamientos tematicos..."​ 
-msrt tmp/subj1 100 v99 tell=$TELL || error "Hubo una falla al ejecutar msrt" 
- 
-echo 
-cecho "​blue"​ "​Generamos la tabla para mapear los numeros de encabezamientos..."​ 
-mx tmp/subj1 "​pft=if s(v1) <> ref(mfn-1,​v1) then putenv('​HEADING_CODE='​v9) fi, v9,'​|',​getenv('​HEADING_CODE'​)/"​ now -all tell=$TELL > tmp/​subjcode.seq || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Eliminamos los encabezamientos duplicados..."​ 
-mx tmp/subj1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=$TELL > tmp/subj.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Creamos la base de encabezamientos tematicos (ordenada y sin duplicados)..."​ 
-id2i tmp/subj.id create/​app=subj tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
- 
-# ------------------------------------------------------------------ 
-# BASE NAME 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
-cecho "​blue"​ " Base de encabezamientos de nombres"​ 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
- 
-cecho "​blue"​ "​Creamos el listado de encabezamientos de nombres..."​ 
-mx "​seq=tmp/​biblio2.id\n"​ lw=1000 "​pft=if getenv('​NAME_TAGS'​) : v1*1.4 then @NAME.PFT fi" now tell=$TELL > tmp/​name1.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Convertimos el listado en una base (desordenada y con duplicados)..."​ 
-id2i tmp/​name1.id create/​app=tmp/​name1 tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
-echo 
-cecho "​blue"​ "​Regularizamos la puntuacion final de los encabezamientos generados..."​ 
-mx tmp/name1 "​proc='​d2a2¦',​v1,'​¦'"​ "​proc='​d1a1¦',​@REGPUNT.PFT,'​¦'"​ "​proc='​d2'"​ copy=tmp/​name1 now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Almacenamos en un campo auxiliar la clave de ordenacion..."​ 
-mx tmp/name1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp/​name1 now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Ordenamos la base de encabezamientos de nombres..."​ 
-msrt tmp/name1 100 v99 tell=$TELL || error "Hubo una falla al ejecutar msrt" 
- 
-echo 
-cecho "​blue"​ "​Generamos la tabla para mapear los numeros de encabezamientos..."​ 
-mx tmp/name1 "​pft=if s(v1) <> ref(mfn-1,​v1) then putenv('​HEADING_CODE='​v9) fi, v9,'​|',​getenv('​HEADING_CODE'​)/"​ now -all tell=$TELL > tmp/​namecode.seq || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Eliminamos los encabezamientos duplicados..."​ 
-mx tmp/name1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=$TELL > tmp/name.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Creamos base de encabezamientos de nombres (ordenada y sin duplicados)..."​ 
-id2i tmp/name.id create/​app=name tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
- 
-echo 
-# ----------------------------------------------------------------- 
-cecho "​blue"​ "​Reasignamos numeros a los encabezamientos en los registros"​ 
-cecho "​blue"​ "​bibliograficos (subcampo 9)..." 
-# ----------------------------------------------------------------- 
-mx seq=tmp/​subjcode.seq create=tmp/​subjcode now -all || error "Hubo una falla al ejecutar mx" 
-mx tmp/​subjcode "fst=1 0 v1" fullinv=tmp/​subjcode || error "Hubo una falla al ejecutar mx" 
-mx seq=tmp/​namecode.seq create=tmp/​namecode now -all || error "Hubo una falla al ejecutar mx" 
-mx tmp/​namecode "fst=1 0 v1" fullinv=tmp/​namecode || error "Hubo una falla al ejecutar mx" 
- 
-mx "​seq=tmp/​biblio2.id\n"​ lw=1000 "​pft=@RECODE.PFT"​ now tell=$TELL > tmp/​biblio3.id || error "Hubo una falla al ejecutar mx" 
- 
- 
-# ------------------------------------------------------------------ 
-# BASE TITLE 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
-cecho "​blue"​ " Base de titulos"​ 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
- 
-cecho "​blue"​ "​Creamos listado de titulos..."​ 
-mx "​seq=tmp/​biblio3.id\n"​ lw=1000 "​pft=if getenv('​TITLE_TAGS'​) : v1*1.4 then ,​@TITLE.PFT,​ fi" now tell=$TELL > tmp/​title1.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Convertimos el listado en una base (desordenada y con duplicados)..."​ 
-id2i tmp/​title1.id create/​app=tmp/​title1 tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
-echo 
-cecho "​blue"​ "​Almacenamos en un campo auxiliar (99) la clave de ordenacion de titulos."​ 
-mx tmp/title1 uctab=UC-ANSI.TAB "​proc='​d99a99¦',​@HEADSORT.PFT,'​¦'"​ copy=tmp/​title1 now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Ordenamos la base de titulos."​ 
-msrt tmp/title1 100 v99 tell=$TELL || error "Hubo una falla al ejecutar msrt" 
- 
-echo 
-cecho "​blue"​ "​Eliminamos los titulos duplicados."​ 
-mx tmp/title1 lw=1000 "​pft=@ELIMDUP2.PFT"​ now tell=$TELL > tmp/​title.id || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ "​Creamos la base de titulos (ordenada y sin duplicados)."​ 
-id2i tmp/​title.id create/​app=title tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
- 
-# ------------------------------------------------------------------ 
-# BASE BIBLIO (2da pasada) 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
-cecho "​blue"​ "Base bibliografica"​ 
-cecho "​blue"​ "​-----------------------------------------------------"​ 
- 
-cecho "​blue"​ "​Recreamos la base bibliografica."​ 
-id2i tmp/​biblio3.id create=biblio tell=$TELL || error "Hubo una falla al ejecutar id2i" 
- 
-echo 
-cecho "​blue"​ "​Ordenamos la base bibliografica."​ 
-msrt biblio 100 @LOCATION_SORT.PFT tell=$TELL || error "Hubo una falla al ejecutar msrt" 
- 
- 
-# ------------------------------------------------------------------ 
-# FULLINV 
-# ------------------------------------------------------------------ 
- 
-# ------------------------------------------------------------------- 
-# Generacion de archivos invertidos. 
-# ATENCION: AC-ANSI.TAB envia los numeros al diccionario. 
-# ------------------------------------------------------------------- 
- 
-echo 
-cecho "​blue"​ " Archivo invertido - Base de temas..."​ 
-mx subj fst=@HEADINGS.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=subj tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ " Archivo invertido - Base de nombres..."​ 
-mx name fst=@HEADINGS.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=name tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ " Archivo invertido - Base de titulos..."​ 
-mx title "fst=2 0 '​~',​@HEADSORT.PFT"​ actab=AC-ANSI.TAB uctab=UC-ANSI.TAB fullinv=title tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-cecho "​blue"​ " Archivo invertido - Base bibliografica..."​ 
-# Antes de la FST, aplicamos un gizmo a los campos que generan puntos de acceso 
-mx biblio gizmo=DICTGIZ,​100,​110,​111,​130,​700,​710,​711,​730,​800,​810,​811,​830 gizmo=DICTGIZ,​240,​245,​246,​440,​740,​600,​610,​611,​630,​650,​651,​653,​655,​656 fst=@BIBLIO.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB stw=@BIBLIO.STW fullinv=biblio tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
- 
-# ------------------------------------------------------------------ 
-# REGISTROS ANALÍTICOS 
-# ------------------------------------------------------------------ 
- 
-echo 
-cecho "​blue"​ "​Detectando registros analíticos..."​ 
-# Para los registros analíticos,​ creamos un 773$9 donde guardar el MFN 
-# del registro asociado, y así ahorrar futuros lookups en el diccionario 
-# ATENCION: esto debe hacerse *después* de aplicado el msrt y generado el diccionario 
- 
-mx biblio "​proc=if p(v773^w) then '​d773a773¦',​v773,'​^9',​f(l('​-NC=',​v773^w),​1,​0),'​¦',​ fi" copy=biblio now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-# Compactamos la base 
-mx biblio create=bibliotmp now -all || error "Hubo una falla al ejecutar mx" 
-# no usamos rename, porque su sintaxis depende de la distribución de Linux 
-mv -f bibliotmp.mst biblio.mst || error 
-mv -f bibliotmp.xrf biblio.xrf || error 
- 
- 
-#echo 
-#cecho "​blue"​ "​Títulos de seriadas..."​ 
-#mx biblio "​-BIBLEVEL=S"​ "​pft=replace(v245*2,'​^','​~'​)"​ now -all > title_serial.txt 
- 
- 
-# ------------------------------------------------------------------ 
-# POSTINGS 
-# ------------------------------------------------------------------ 
- 
-echo 
-# -------------------------------------------------------- 
-cecho "​blue"​ "​Asignamos postings a los terminos del indice de temas."​ 
-# -------------------------------------------------------- 
-mx subj "​proc='​d11a11#',​f(npost(['​biblio'​]'​_SUBJ_'​v9),​1,​0),'#'"​ copy=subj now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-# ---------------------------------------------------------- 
-cecho "​blue"​ "​Asignamos postings a los terminos del indice de nombres."​ 
-# ---------------------------------------------------------- 
-mx name "​proc='​d11a11#',​f(npost(['​biblio'​]'​_NAME_'​v9),​1,​0),'#'"​ copy=name now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- 
-# TO-DO: necesitamos postings para los títulos controlados (series, títulos uniformes). 
-# Para eso necesitamos un subcampo $9 en la base de títulos. 
- 
- 
-# ------------------------------------------------------------------ 
-# DICCIONARIOS PARA AGREP 
-# ------------------------------------------------------------------ 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "​Generamos diccionarios para AGREP."​ 
-# Solo nos interesan claves asociadas a ciertos tags. 
-# /100 restringe la cantidad de postings (de lo contrario, da error) 
-# ATENCION: los sufijos NAME, SUBJ, TITLE van en mayusculas o minusculas 
-# en base a los valores que tome el parámetro CGI correspondiente. 
-# ----------------------------------------------------- 
-cecho "​blue"​ " ​  - subj" 
-# Para bibima usamos la base MSC; para el resto, la base SUBJ 
-# TO-DO: la base subj también sirve para bibima; usar cat & uniq 
-if [ "​$DB_NAME"​ = "​bibima"​ ]; then 
-    mx dict=MSC "​pft=v1^*/"​ k1=a k2=zz now > dictSUBJ.txt || error "Hubo una falla al ejecutar mx" 
-else 
-    mx dict=subj "​pft=v1^*/"​ k1=a k2=zz now > dictSUBJ.txt || error "Hubo una falla al ejecutar mx" 
-fi 
- 
-cecho "​blue"​ " ​  - name" 
-mx dict=name "​pft=v1^*/"​ k1=a k2=zz now > dictNAME.txt || error "Hubo una falla al ejecutar mx" 
- 
-cecho "​blue"​ " ​  - title (incluye series)"​ 
-#mx dict=biblio,​1,​2/​100 ​ "​pft=if v2^t : '​204'​ then v1^*/ fi" k1=a now > dicttitle.txt 
-ifkeys biblio +tags from=a to=zzzz > tmp/​titlekeys.txt || error "Hubo una falla al ejecutar ifkeys"​ 
-mx seq=tmp/​titlekeys.txt "​pft=if '​204~404'​ : right(v2,3) then v3/ fi" now > tmp/​titlekeys2.txt || error "Hubo una falla al ejecutar mx" 
-cat tmp/​titlekeys2.txt | uniq > dictTITLE.txt || error 
- 
-cecho "​blue"​ " ​  - any" 
-# union de los diccionarios anteriores (eliminando términos duplicados) 
-cat dict*.txt | sort | uniq > dictANY.txt || error 
- 
- 
-# ------------------------------------------------------------------ 
-# ARCHIVOS AUXILIARES 
-# ------------------------------------------------------------------ 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "Lista de codigos de idioma."​ 
-# ----------------------------------------------------- 
-mx seq=LANG.TXT create=tmp/​lang now -all || error "Hubo una falla al ejecutar mx" 
-mx tmp/lang fst=@LANG.FST fullinv=tmp/​lang || error "Hubo una falla al ejecutar mx" 
-mx dict=biblio "​k1=-LANG=A"​ "​k2=-LANG=ZZZ"​ "​pft=v1^**6.3,'​|',​v1^t/"​ now > tmp/​langcode.txt || error "Hubo una falla al ejecutar mx" 
-mx seq=tmp/​langcode.txt create=tmp/​langcode now -all || error "Hubo una falla al ejecutar mx" 
-msrt tmp/​langcode 30 "​ref(['​tmp/​lang'​]l(['​tmp/​lang'​]v1.3),​s(mpu,​v3))"​ || error "Hubo una falla al ejecutar msrt" 
-mx tmp/​langcode "​pft=v1,'​^p',​v2,'​^',/"​ now -all > langcode.txt || error "Hubo una falla al ejecutar mx" 
- 
- 
-if [ "​$DB_NAME"​ = "​bibima"​ ]; then 
- echo 
- # ----------------------------------------------------- 
- cecho "​blue"​ "​Actualizamos los postings para cada código MSC" 
- # ----------------------------------------------------- 
- mx MSC "​proc=if l(['​biblio'​]'​-MSC='​v1) > 0 then '​d7a7@',​f(npost(['​biblio'​]'​-MSC='​v1),​1,​0),'​@'​ fi" copy=MSC now -all tell=$TELL || error "Hubo una falla al ejecutar mx" 
- # TO-DO: compactar la base MSC 
-fi 
- 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "Lista de codigos de bibliotecas."​ 
-# ----------------------------------------------------- 
-mx dict=biblio "​k1=-BIB=A"​ "​k2=-BIB=ZZZ"​ "​pft=v1^**5,'​^p',​v1^t/"​ now > bibcode.txt || error "Hubo una falla al ejecutar mx" 
- 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "​Fechas extremas."​ 
-# ----------------------------------------------------- 
-mx dict=biblio "​k1=-F=1"​ "​k2=-F=2999"​ "​pft=v1^**3/"​ now > tmp/​dates1.txt || error "Hubo una falla al ejecutar mx" 
-mx tmp to=1 "​proc='​a1~',​replace(s(cat('​tmp/​dates1.txt'​)),​s(#​),'&'​),'​~'"​ "​pft=v1.4,'​-',​s(right(v1,​5)).4"​ > dates.txt || error "Hubo una falla al ejecutar mx" 
- 
-# ----------------------------------------------------- 
-# Total de registros disponibles 
-# ----------------------------------------------------- 
-echo > bases.txt || error 
-mx biblio count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​BIBLIOGRAPHIC_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.txt || error "Hubo una falla al ejecutar mx" 
-mx name count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​NAME_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.txt || error "Hubo una falla al ejecutar mx" 
-mx subj count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​SUBJ_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.txt || error "Hubo una falla al ejecutar mx" 
-mx title count=1 "​pft=proc('​a5001~',​f(maxmfn-1,​1,​0),'​~'​),'​TITLE_TOTAL=',​left(v5001,​size(v5001)-3),​if size(v5001) > 3 then '​.'​ fi,​right(v5001,​3)/"​ >> bases.txt || error "Hubo una falla al ejecutar mx" 
- 
-# ----------------------------------------------------- 
-# Total de ejemplares disponibles 
-# ----------------------------------------------------- 
- 
-# ATENCION: necesitamos una buena definición de "​ejemplares"​ (los "​items"​ de FRBR) 
-# Por ahora, vamos a contar los nros. de inventario, 859$p 
-mx biblio "​pft=(v859^p/​)"​ now | wc -l > tmp/​items-total.txt || error "Hubo una falla al ejecutar mx" 
-mx seq=tmp/​items-total.txt "​pft=proc('​d1a1|',​replace(v1,'​ ',''​),'​|'​),​ if size(v1) > 3 then left(v1,​size(v1)-3),'​.',​right(v1,​3),​ else v1, fi" now > tmp/​items-total-punto.txt || error "Hubo una falla al ejecutar mx" 
-echo "​ITEMS_TOTAL=`cat tmp/​items-total-punto.txt`"​ >> bases.txt || error 
- 
-cat bases.txt || error 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "​Listado de novedades."​ 
-# ----------------------------------------------------- 
-# TO-DO: generalizar para cualquier año y/o mes, y para otros criterios (e.g. en ABCI por inventario) 
-mx biblio "​pft=if v859^y[1]*6 = '​2006'​ then v1/ fi" now | sort > novedades.txt || error "Hubo una falla al ejecutar mx" 
- 
-echo 
-# ----------------------------------------------------- 
-cecho "​blue"​ "Fecha de esta actualizacion."​ 
-# ----------------------------------------------------- 
-mx tmp "​pft=s(date)*6.2,'/',​s(date)*4.2,'/',​s(date).4,'​ a las ',​s(date)*9.2,':',​s(date)*11.2"​ to=1 > updated.txt || error "Hubo una falla al ejecutar mx" 
- 
- 
-# ------------------------------------------------------------------ 
-# CONVERSION A WINDOWS 
-# ------------------------------------------------------------------ 
- 
-if [ "​$CONVERT_WINDOWS"​ = "​1"​ ]; then 
- echo 
- cecho "​blue"​ "​Conversion a Windows: bases de datos."​ 
- if [ ! -d "​windows"​ ]; then 
- mkdir windows || error "No se pudo crear el directorio windows"​ 
- fi 
- #cecho "​blue"​ "​Directorio $2/windows creado."​ 
- 
- cecho "​blue"​ " ​  - biblio"​ 
- crunchmf biblio windows/​biblio || error "Hubo una falla al ejecutar crunchmf"​ 
- crunchif biblio windows/​biblio || error "Hubo una falla al ejecutar crunchif"​ 
- 
- cecho "​blue"​ " ​  - name" 
- crunchmf name windows/​name || error "Hubo una falla al ejecutar crunchmf"​ 
- crunchif name windows/​name || error "Hubo una falla al ejecutar crunchif"​ 
- 
- cecho "​blue"​ " ​  - subj" 
- crunchmf subj windows/​subj || error "Hubo una falla al ejecutar crunchmf"​ 
- crunchif subj windows/​subj || error "Hubo una falla al ejecutar crunchif"​ 
- 
- cecho "​blue"​ " ​  - title" 
- crunchmf title windows/​title || error "Hubo una falla al ejecutar crunchmf"​ 
- crunchif title windows/​title || error "Hubo una falla al ejecutar crunchif"​ 
-  
- cecho "​blue"​ "​Conversion a Windows: archivos de texto."​ 
- cp *.txt windows/ 
- unix2dos windows/​*.txt ​     
-fi 
- 
- 
-# Eliminamos archivos temporales generados por este script 
-if [ "​$CLEAN"​ = "​1"​ ]; then 
- echo 
- cecho "​blue"​ "​Eliminando archivos temporales..."​ 
- rm -rf tmp/ || error "No se puede eliminar el directorio tmp" 
- rm -rf *.ln* 2>/​dev/​null 
- rm -rf *.lk* 2>/​dev/​null 
-fi 
- 
- 
-# Movemos los archivos generados (previamente vaciamos $TARGET_DIR) 
-# TO-DO: supongamos que alguien quiere mover la versión para Windows de las bases...  ​ 
-if [ "​$MOVE"​ = "​1"​ ]; then 
- echo 
- cecho "​blue"​ "​Moviendo los archivos generados..."​ 
- rm -rf $TARGET_DIR/​* || error "No se puede vaciar el directorio $TARGET_DIR"​ 
- mv -f *.* $TARGET_DIR || error "No se puede mover los archivos a $TARGET_DIR"​ 
-fi 
- 
-# ¿esto es necesario? 
-CIPAR= 
- 
-echo 
-cecho "​blue"​ "​`basename $0` finalizó exitosamente. Hasta pronto."​ 
-echo 
-exit 0 
-</​code>​ 
update-opac.sh.txt · Last modified: 06/05/2009 00:00 (external edit)