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