On Tue, Jun 30, 2015 at 11:46:24AM -0500, Debia Linux wrote:
> Listeros:
> 
> Buenos dias tengan todos ustedes.
> 
> Tengo una base de datos en un archivo de texto que manejo en bash
> (solo he podido ingresar los datos con un script sencillo mediante
> comando echo y read).
> 
> La estructura del la base de datos (productos.db) es:
> 
> CODIGO PRODUCTO|NOMBRE DE PRODUCTO|PAIS ORIGEN|DESCRIPCION|
> 124564_78789888878|CALCULADORA||CALCULADORA DIGITAL CON 15 DIGITOS|
> 
> Como podran ver en la columna 3 (pais de origen no existe pais de
> origen esta en "blanco" (por decirlo de alguna manera.
> 
> ¿Como puedo hacerle mediante algun comando para ingresar el nombre del
> pais (ya que en su momento no sabiamos el pais donde se mando a hacer)
> justamente en la columna tres.
> 
> mediante egrep puedo aislar la linea de este producto (porque son
> muchos productos con un codigo diferente.
> 
> egrep 124564_78789888878 productos.db > tmp0
> 
> 
> Ya tengo aislada la linea y ahora ¿Cómo le hago?. Podria yo usar tal
> vez awk pero no se como funcionaria.
> 
> Gracias por su ayuda.

Hola:

Si la estructura de las tuplas que no cuentan con el campo 3 cumple con 
que siempre habrá un "||" cuando no esté el país, con sed podrías 
intentar:

sed '/^124564_78789888878/s/||/|ATLANTIDA|/' productos.db > productos.alt

Pero eso debieras aplicarlo para cada uno de los productos que deseas 
actualizar. Algo en el estilo:

sed '
/^124564_78789888878/s/||/|ATLANTIDA|/
/^124564_78789888868/s/||/|MORDOR|/
/^124564_78789888848/s/||/|ARRAKIS|/' productos.db > productos.alt

Una opción que quizás pueda resultar menos engorrosa sería:

1. Crea una segunda base de datos, con la estructura:

CODIGO PRODUCTO|PAIS ORIGEN|
124564_78789888878|ATLANTIDA|

Puedes llamarla pais_productos.db y detallar todos los códigos con su 
respectivo país.

2. Ejecutar un `join' entre las dos bases:

$ join -a 1 -t'|' productos.db pais_productos.db > actualizacion_productos.db

3. Hecho el `join', los campos que fueron unidos entre ambas bases 
   tendrán un campo extra, respecto a los productos que ya tenían la 
   columna PAIS ORIGEN con información, por lo que puedes usar awk para 
   hacer las modificaciones adecuadas:

awk '
  BEGIN   { FS="|"; OFS="|" }
  NF != 6 { print }'
  NF == 6 { print $1, $2, $5, $4, $6 }' actualizacion_productos.db

Eso se me ocurre por ahora. No ejecutes esto a ciegas, pues no lo he 
verificado y probablemente tenga alguna falla que debas corregir. Lee el 
manual de `join', pues es necesario que las dos bases de datos que vayas 
a emplear se encuentren ordenadas por el campo del código de producto 
(join toma el campo 1 por omisión), por lo que tal vez debas valerte de 
sort para tales menesteres.

Saludos.

-- 
Pablo Jiménez


-- 
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20150630174115.gb2...@emblema.mistral.lan.com

Responder a