Last active
September 16, 2019 16:30
-
-
Save madacol/6cc2bd40acd3727df78fc89378ec78de to your computer and use it in GitHub Desktop.
Transform padron reducido to SQL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
"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 conblahblah\|
, aqui el carácter|
está escapado y por lo tanto forma parte del contenido (blahblah|), pero si en cambio conseguimosblahblah\\|
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