[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Reemplazo de texto en una base de datos



El proceso técnicamente es sencillo

```bash
$ cat uno.txt
JUAN ALBERTO|SANCHEZ MEDINA|32|juan@gmail.com|
 JUAN ALBERTO|SANCHEZ MEDINA    otro|32|juan@gmail.com|
 JUAN ALBERTO|SANCHEZ MEDINA otro mas|32|juan@gmail.com|
ROBERTO0| SANTOS RODRIGUEZ|52|roberto@gmail.com|
ROBERTO1| SANTOS   RODRIGUEZ|52|roberto@gmail.com|
ROBERTO2| SANTOS RODRIGUEZ |52|roberto@gmail.com|
```

```bash
$ cat pasos.bash
#!/bin/bash

while read linea;
  do
    nombre="$(echo ${linea} |  cut -d\| -f1)";
    apellidos="$(echo ${linea} |  cut -d\| -f2)";
    ape1="$(echo ${apellidos} |  cut -d' ' -f1)";
    ape2="$(echo ${apellidos} |  cut -d' ' -f2-)";
    numero="$(echo ${linea} |  cut -d\| -f3)";
    correo="$(echo ${linea} |  cut -d\| -f4)";
    nuevaLinea="${nombre}|${ape1}|${ape2}|${numero}|${correo}|";
    echo "${linea} => ${nuevaLinea}"
  done <uno.txt | sed -e "s/  */ /g" -e "s/| /|/g" -e "s/ |/|/g" -e "s/ |/|/g" -e "s/^ //" -e "s/ $//"
```

```bash
$ ./pasos.bash
JUAN ALBERTO|SANCHEZ MEDINA|32|juan@gmail.com|=> JUAN ALBERTO|SANCHEZ|MEDINA|32|juan@gmail.com|
JUAN ALBERTO|SANCHEZ MEDINA otro|32|juan@gmail.com|=> JUAN ALBERTO|SANCHEZ|MEDINA otro|32|juan@gmail.com|
JUAN ALBERTO|SANCHEZ MEDINA otro mas|32|juan@gmail.com|=> JUAN ALBERTO|SANCHEZ|MEDINA otro mas|32|juan@gmail.com|
ROBERTO0|SANTOS RODRIGUEZ|52|roberto@gmail.com|=> ROBERTO0|SANTOS|RODRIGUEZ|52|roberto@gmail.com|
ROBERTO1|SANTOS RODRIGUEZ|52|roberto@gmail.com|=> ROBERTO1|SANTOS|RODRIGUEZ|52|roberto@gmail.com|
ROBERTO2|SANTOS RODRIGUEZ|52|roberto@gmail.com|=> ROBERTO2|SANTOS|RODRIGUEZ|52|roberto@gmail.com|
```
El tema es cuando existen mas de dos palabras en la columna de apellidos

On Thu, Oct 3, 2019 at 6:41 PM Debia Linux <debianeromx@gmail.com> wrote:
Gonzalo:

Te agradezco la respuesta. Realizaré preubas.

Gracias

On Thu, Oct 3, 2019 at 5:57 PM Gonzalo Rivero <fishfromsalta@gmail.com> wrote:
>
>
>
> El jue, 03-10-2019 a las 17:20 -0500, Debia Linux escribió:
> > Me encataria hacer esto, sin embargo es usar MySQL y eso no es lo que
> > busco, yo diria algo mas sencillo, sin tener que crear usarios, sin
> > configurar. Yo busco algo mas como bash.
> >
> > DebianeroMx
> >
> > On Thu, Oct 3, 2019 at 5:12 PM Fran Torres <
> > frantorresgallego@gmail.com> wrote:
> > > Buenas,
> > >
> > > yo lo que puedo sugerir, es que con un alter table, añadas el campo
> > > Segundo_apellido (por ejemplo) y que, todos los nuevos apellidos
> > > vayan
> > > a parar ahí. En el primer campo apellidos vayan los paternos, y en
> > > el
> > > segundo (el nuevo) los maternos. Luego... inevitablemente los
> > > registros que ya están hay que cambiarlos uno a uno y los nuevos...
> > > bueno, habría que hacer lo propio con el programa en cuestión. Lo
> > > que
> > > eso implicaría parar el servidor por mantenimiento...
> > >
> > > Fran.
> > >
> > > El 3/10/19, Debia Linux <debianeromx@gmail.com> escribió:
> > > > Lista:
> > > >
> > > > Buenas tardes, me encuentro con un dilema que no puedo resolver.
> > > >
> > > > Tengo una base de datos con NOMBRES, APELLIDOS, EDAD y CORREO y
> > > > tiene
> > > > la estructura siguiente:
> > > >
> > > > JUAN ALBERTO|SANCHEZ MEDINA|32|juan@gmail.com|
> > > > ROBERTO| SANTOS RODRIGUEZ|52|roberto@gmail.com|
> > > >
> > > >
> podés imprimir con awk solo el segundo campo (de los apellidos) y luego
> con awk podés imprimir el primer campo, un "|" y el segundo campo:
>
> awk -F '|' "{print $2};" | awk '{print $1 "|" print $2};'
> No estoy seguro que eso funcione a la primera, y si estoy seguro que
> habrá una forma mas fácil de hacerlo.
> man awk
>
> seguramente también podrás hacer algo con cut (man cut) o sed (man
> sed), o hasta usando la sustitución de valores/variables del propio
> bash (buscar "Advanced Bash Scripting Guide")
>
> > > > y asi suman 100 nombres con apellidos y se van sumando 20
> > > > diariamente.
> > > >
> > > > ¿Como puedo separar los apellidos paternos de los maternos con
> > > > una
> > > > barra vertical | sin tener que hacerlo uno por uno, siempre
> > > > usando un
> > > > script en bash ademas de que diariamente se van añadiendo.
> > > >
> > > > Gracias
> > > >
> > > >
>



--
"Cada cual según sus fuerzas, cada quien según sus necesidades..."

Reply to: