Skip to content

Instantly share code, notes, and snippets.

@madacol
Last active September 16, 2019 16:30
Show Gist options
  • Save madacol/6cc2bd40acd3727df78fc89378ec78de to your computer and use it in GitHub Desktop.
Save madacol/6cc2bd40acd3727df78fc89378ec78de to your computer and use it in GitHub Desktop.
Transform padron reducido to SQL
gzip -c -d ~/Downloads/padron_reducido_ruc.zip | tail -n+2 | iconv -f ISO-8859-1 -t UTF-8//TRANSLIT | sed -E -e "s/'/''/g" -e "s/\|$/')/g" -e "s/^/,('/g" -e "s/([^\\\\])(\\\\\\\\)*\|/\1\2','/g" -e "1~100000 s/^,/;insert into consulta_ruc (idruc, razon_social, estado_contri, domicilio, ubigeo, via, nombre_via, zona, tipo_zona, numero, interior, lote, departamento, mazana, kilometro) values /g" -e "1 s/^;//g" -e "$ s/$/;/g"
@madacol
Copy link
Author

madacol commented Aug 5, 2019

  • "s/'/''/g" : duplica todas las comillas simples (Es la forma de escaparlas en SQL)
  • "s/\|$/');/g" : suplanta el carácter | que está al final de cada linea, por );
  • "s/([^\\\\])(\\\\\\\\)*\|/\1\2','/g" : suplanta los | que separan las columnas por ',' . La razón de tantos carácteres \ es debido a la forma en que funciona bash, ya que esto \\\\ termina conviertondose en \\ lo cual en regex se interpreta como un solo caracter \, y el resto de las complejidad de este regex, es para detectar cuando el caracter | está separando columnas y cuando forma parte del contenido de la columna, ya que si nos conseguimos con blahblah\| , aqui el carácter | está escapado y por lo tanto forma parte del contenido (blahblah|), pero si en cambio conseguimos blahblah\\| en este caso el caracter que está escapado es el \ y por lo tanto el contenido es "blahblah\". Oséa, vamos a reemplazar los caracteres | que estén precedidos por una cantidad par de carácteres \, por eso está esta parte del regex (\\\\\\\\)* 0 o mas repeticiones de 2 carácteres \ consecutivos, ([^\\\\]) precedido por un carácter diferente a \
  • "s/^/insert into consulta_ruc (idruc, razon_social, estado_contri, domicilio, ubigeo, via, nombre_via, zona, tipo_zona, numero, interior, lote, departamento, mazana, kilometro) values ('/g" : inserta todo ese string "insert ... ('" al principio de cada linea
  • "1 s/^;//g" : elimina el ; al principio de la 1era linea
  • "$ s/$/;/g" : Agrega ; al final de la última linea

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment