Muchas veces se necesitan hacer operaciones de datos con archivos de texto, y suele ser complicado, hay que subir los archivos nuevamente a la base de datos, etc.
Utilizando esta guia y con un poco de conocimiento de SQL, vas a poder hacer “magia”.
Consideremos el siguiente archivo de prueba
1 2 3 4 5 6 |
/tmp/prueba.txt 1|Valor11|Valor21|Campo33 2|Valor12|Valor22|Campo32 3|Valor12|Valor21|Campo33 4|Valor13|Valor21|Campo32 5|Valor11|Valor23|Campo31 |
SELECT * FROM
cat $archivoReemplazar $archivo por un archivo
Ejemplo
1 2 3 4 5 6 7 |
cat /tmp/prueba.txt ------- 1|Valor11|Valor21|Campo33 2|Valor12|Valor22|Campo32 3|Valor12|Valor21|Campo33 4|Valor13|Valor21|Campo32 5|Valor11|Valor23|Campo31 |
SELECT * FROM WHERE rowid = (linea)
sed -n '$lineap' $archivoReemplazar $linea por un numero de linea
Reemplazar $archivo por el archivo
Atención que el numero sigue de una “p”
Ejemplo
1 2 3 |
sed -n '3p' /tmp/prueba.txt ------- 3|Valor12|Valor21|Campo33 |
SELECT * FROM WHERE rowid BETWEEN (linea 1, linea 2)
1 |
sed -n '$desde,$hastap' $archivo |
Reemplazar $desde por el numero de linea desde
Reemplazar $hasta por el numero de linea hasta
Reemplazar $archivo por el archivo
Ejemplo
1 2 3 4 |
sed -n '3,4p' /tmp/prueba.txt ------- 3|Valor12|Valor21|Campo33 4|Valor13|Valor21|Campo32 |
SELECT COUNT 1 FROM file
1 |
echo "Total: " `wc -l $archivo` |
Reemplazar $archivo por un archivo
Ejemplo
1 2 3 |
echo "Total: " `wc -l /tmp/prueba.txt` ------- Total: 5 |
SELECT COUNT(1), FROM GROUP BY (campo 1)
1 |
cat $archivo| awk '{FS="$separador"}{print $numCampo}' | sort | uniq -c |
Reemplazar $archivo por el archivo que corresponde
Reemplazar $separador por el caracter de separacion del archivo, “|”, “,”, “;” etc
Reemplazar $numCampo por el NUMERO de campo (1, 2, 3, 99)
Atencion, el $numCampo va precedido de un simbolo “$”
Ejemplo
1 2 3 4 5 |
cat /tmp/prueba.txt | awk '{FS="|"}{print $2}' | sort | uniq -c ------- 2 Valor11 2 Valor12 1 Valor13 |
SELECT COUNT(1), campo1, campo2 FROM GROUP BY (campo 1, campo 2)
1 |
cat $archivo| awk '{FS="$separador"}{print $numCampo1 $numCampo2}' | sort | uniq -c |
Reemplazar $archivo por el archivo que corresponde
Reemplazar $separador por el caracter de separacion del archivo, “|”, “,”, “;” etc
Reemplazar $numCampo1 y $numCampo2 por los numeros de campo (1, 2, 3, 99)
Atencion, el $numCampo va precedido de un simbolo “$”
Ejemplo
1 2 3 4 5 6 7 |
cat /tmp/prueba.txt | awk '{FS="|"}{print $2 $3}' | sort | uniq -c ------- 1 Valor11 Valor21 1 Valor11 Valor23 1 Valor12 Valor22 1 Valor12 Valor21 1 Valor13 Valor21 |
SELECT COUNT(1), campo GROUP BY (campo) HAVING COUNT(1) > numero
1 |
cat $archivo | awk '{FS="$separador"}{print $numCampo}' | sort | uniq -c | awk '{FS=" "}{if( $1 > $numero) print $0}' |
Reemplazar $archivo por el archivo que corresponde
Reemplazar $separador por el caracter separador que corresponda
Reemplazar $numCampo por el campo agrupador
Reemplazar $numero por el numero de condicion del HAVING
Ejemplo
1 2 3 4 |
cat /tmp/prueba.txt | awk '{FS="|"}{print $2}' | sort | uniq -c | awk '{FS=" "}{if( $1 > 5) print $0}' ------- 6 Valor11 6 Valor12 |
SELECT campo1, campo2, et FROM
1 |
cat $archivo | awk '{FS="$separador"}{print $numCampo1,$numCampo2,$numCampo3}' |
Reemplazar $archivo por el archivo que corresponde
Reemplazar $separador por el separador del archivo original (usualmente un pipe, ‘|’)
Reemplazar $numCampo1, etc por el NUMERO de campo (1, 2, 3, 99)
1 2 3 4 5 6 7 8 |
cat /tmp/prueba.txt | awk '{FS="|"}{print $2 $3}' ------- Ejemplo: Valor11 Valor21 Valor11 Valor23 Valor12 Valor22 Valor12 Valor21 Valor13 Valor21 |
SELECT campo1, campo2, etc FROM archivo where = condicion
1 |
cat $archivo | awk '{FS="$separador"}{if($numCampo=="$texto" && $numCampo!=$numero || $numCampo==$numero) print $numCampo1,$numCampo2,$numCampo3}' |
Los tipos de condiciones disponibles son las siguientes
SQL |
Shell |
= 1 | $1==1 |
= ‘varchar’ | $1==”hola” |
campo1 <> 1 | $1!=1 |
AND | $1==1 && $2==’hola’ |
OR |
$1==1 || $2==’hola’ |
> | $1>1 |
Reemplazar $archivo por el archivo que corresponde
Reemplazar $separador por el separador del archivo original (usualmente un pipe, ‘|’)
Reemplazar $numCampo por el NUMERO de campo (1, 2, 3, 99)
Reemplazar $numero por un numero
Reemplazar $texto por un texto
Ejemplo
1 2 3 4 |
cat /tmp/prueba.txt | awk '{FS="|"}{if($2=="Valor11" && $1!=3 || $1==4) print $1,$2,$3}' 1 Valor11 Valor21 Campo33 4 Valor13 Valor21 Campo32 |
SUBSTR(Campo, inicio, fin)
1 |
cat $archivo | awk '{FS="$separador"}{print $numCampo}' | cut -c$num1-$num2 |
Ejemplo
1 2 3 4 5 6 |
cat /tmp/prueba.txt| awk '{FS="|"}{print $2}' | cut -c3-7 lor11 lor12 lor12 lor13 lor11 |