$ ls -1 CD*| head
CDMEXNCARGNC03179
CDMEXNCARGNC03180
CDMEXNCARGNC03181
CDMEXNCARGNC03182
CDMEXNCAUSOP02976
CDMEXNCAUSOP02977
CDMEXNCAUSOP02978
CDMEXNCAUSOP02979
CDMEXNCAUTCA02374
CDMEXNCAUTCA02375
Estos datos fueron registrados en una tabla de BD, ¿se necesita consultar todos los registro? Solo entrega un registro por archivo.
La sentencia a emplear es
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='ARGNC' and sqn=3179;
Para evitar el copiar cada segmento y pegarlo registro por registro
$ for _a in `ls -1 CD* | cut -c8-12 | sort -u`
> do
> echo "union">>file.sql;
> echo "select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='$_a' and sqn in \
> `ls -1 | grep $_a | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'`" >> file.sql
> done
$ head file.sql
union
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='ARGNC' and sqn in (03179,03180,03181,03182)
union
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUSOP' and sqn in (02976,02977,02978,02979)
union
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTCA' and sqn in (02374,02375,02376,02377)
union
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTMM' and sqn in (03060,03061,03062,03063)
union
select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTPT' and sqn in (02988,02989,02990,02991)
Ahora se puede emplear el archivo file.sql eliminando la primera linea para obtener el resultado. Si se cuenta la cantidad de registros que entrega en este caso es idéntico a la cantidad de archivos.
Explicación del código
`ls -1 CD* | cut -c8-12 | sort -u`
- Se lista en una sola columna todos los archivos que inicien con CD, se cortan del caracter 8 al 12 y se ordenan eliminando duplicados
for _a in `ls -1 CD* | cut -c8-12 | sort -u`; do [...] done;
Se emplea un ciclo for para asignar a la variable $_a todas las cadenas que cumplan con el resultado del ls
- Dentro de cada ciclo
- Imprime union y lo manda al archivo file.sql
- Imprime la sentencia concatenada con la salida del ls y lo envia al archivo file.sql
`ls -1 | grep $_a | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'`
Se listan los archivos
- Se busca el que tenga $_a en su nombre
- Corta del caracter 13 al 17
- Convierte la salida de una columna a una fila
- Transforma todos los espacios en comas
- Agrega a toda la cadena paréntesis al inicio y al final
$ ls CD* | head
CDMEXNCARGNC03179
CDMEXNCARGNC03180
CDMEXNCARGNC03181
CDMEXNCARGNC03182
CDMEXNCAUSOP02976
CDMEXNCAUSOP02977
CDMEXNCAUSOP02978
CDMEXNCAUSOP02979
CDMEXNCAUTCA02374
CDMEXNCAUTCA02375
$ ls CD* | cut -c8-12 | head
ARGNC
ARGNC
ARGNC
ARGNC
AUSOP
AUSOP
AUSOP
AUSOP
AUTCA
AUTCA
$ ls CD* | cut -c8-12 | sort -u | head
ARGNC
AUSOP
AUTCA
AUTMM
AUTPT
AUTTR
BELMO
BELTB
BGR01
BHRBT
$ ls -1 CD* | head
CDMEXNCARGNC03179
CDMEXNCARGNC03180
CDMEXNCARGNC03181
CDMEXNCARGNC03182
CDMEXNCAUSOP02976
CDMEXNCAUSOP02977
CDMEXNCAUSOP02978
CDMEXNCAUSOP02979
CDMEXNCAUTCA02374
CDMEXNCAUTCA02375
$ ls -1 CD* | grep ARGNC
CDMEXNCARGNC03179
CDMEXNCARGNC03180
CDMEXNCARGNC03181
CDMEXNCARGNC03182
$ ls -1 CD* | grep ARGNC | cut -c13-17
03179
03180
03181
03182
$ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs
03179 03180 03181 03182
$ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs | sed -e 's/ /,/g'
03179,03180,03181,03182
$ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'
(03179,03180,03181,03182)
Escrito con el Navegador Flock
No hay comentarios:
Publicar un comentario