Mostrando postagens com marcador gzip. Mostrar todas as postagens
Mostrando postagens com marcador gzip. Mostrar todas as postagens

terça-feira, 3 de março de 2015

For + Awk - Parte 2

Problema: Dado um diretório, contendo diversos subdiretórios, que por sua vez contém diversos arquivos compactados e você precisa descompactar os arquivos de alguns destes diretórios.

Alternativa de solução: Vasculhar todos os diretórios, selecionando apenas os subdiretórios que interessam através, por exemplo de um awk.

Exemplo:

for k in $(for i in $(find /dados/ -type d);do for j in $(ls $i/*.gz); do echo $j | awk 'BEGIN{FS="/"}{if ($7 >= "20150106" && $7 <= "20150115"){print $0;}}' ;done; done); do gzip -dc $k; done | gzip > /dados/arquivo_20150106_20150115.txt.gz

Neste exemplo, eu vasculho todos os subdiretórios cujo nome esteja entre 20150106 e 20150115, descompacto estes arquivos e os compacto em uma nova saída.



terça-feira, 17 de junho de 2014

Bash (For) + Gzip + Loader Mysql

Problema: Efetuar o LOADER em banco de dados MySQL de arquivos compactados em inúmeros subdiretórios de um diretório pai.

Sugestão de solução: Fazer um (bash) FOR primeiro para a leitura dos subdiretórios, seguido do (bash) FOR para a obtenção dos arquivos, descompactar o arquivo, efetuar o loader e compactar o arquivo.

Sintaxe:

for j in $(ls -d <diretório_pai>*); do for i in $(ls $j/*gz); do tam=${#i}; arq=${i:0:tam-3}; dir=${j:33}; gzip -d $i ; echo 'LOAD DATA LOCAL INFILE "'$arq'" INTO TABLE <tabela> FIELDS TERMINATED BY "'''\''" LINES TERMINATED BY "\n" set filename="'$arq'", directory="'$dir'";' | mysql -u<user> -p<password> -qs; gzip $arq; done; done 

onde:
<diretório_pai> - caminho completo do diretório pai
<tabela> - tabela MySQL aonde os dados serão carregados
<user> - usuário MySQL
<password> - password do <user> MySQL

Opção mais completa - Tratar antes o arquivo (com um script perl, por exemplo) e verificar se houve erros na carga dos arquivos gerando um log

Sintaxe:


for j in $(ls -d <diretório_pai>*); do for i in $(ls $j/*gz); do tam=${#i}; arq=${i:0:tam-3}; arq_novo=$arq.new; dir=${j:33}; gzip -d $i ; <script> $arq > $arq_novo ; echo 'LOAD DATA LOCAL INFILE "'$arq_novo'" INTO TABLE <tabela> FIELDS TERMINATED BY "'''\''" LINES TERMINATED BY "\n" (<col1>, <col2>,..,<col3>) set filename="'$arq'", directory="'$dir'"; show warnings;' | mysql -u<user> -p<password> -qs; gzip $arq; rm -fr $arq_novo; done; done > <arquivo_log> &


onde:
<diretório_pai> - caminho completo do diretório pai
<script> - script a ser executado
<tabela> - tabela MySQL aonde os dados serão carregados
<col1>, <col2>, .., <coln> - colunas da <tabela>
<user> - usuário MySQL
<password> - password do <user> MySQL
<arquivo_log> - nome do arquivo log

sexta-feira, 21 de março de 2014

Bash - Descompactar arquivos em Subdiretórios

Boa e velha dica para descompactar arquivos em subdiretórios!
Basta usar os comandos FOR + FIND + GZIP

Sintaxe:

for i in $(find -type f -print); do gzip -d $i; done

Exemplo:

for i in $(find 20140* -type f -print); do gzip -d $i; done

sexta-feira, 22 de novembro de 2013

Descompactar Arquivos TAR com GZ

Super dica enviada pelo Jorge :-)

Recebi alguns pacotes de arquivos compactados (TAR). Dentro deles uma série de arquivos GZ.

Dado o volume, eu não posso simplesmente descompactar tudo para depois aplicar meu filtro. Preciso ir descompactando tudo pra saída padrão e filtrando.

Pra isso:

for i in $(tar -tf ARQ.tar ; do tar -xOf ARQ.tar $i | gzip -dc | ./meufiltro; done | gzip > filtrado.txt.gz


quinta-feira, 26 de julho de 2012

Compactar arquivos usando Multi Thread

Para compactar (e descompactar) arquivos em máquinas com mais de um núcleo a sugestão é utilizar o utilitário pigz (http://zlib.net/pigz/) que possui os mesmos paramêtros do gzip e trabalha com diversas threads !

quinta-feira, 16 de fevereiro de 2012

Compactando e Descompactando Arquivos - GZIP

Compactar arquivo, substituindo o arquivo original pelo arquivo compactado:
gzip <arquivo>, onde <arquivo> pode inclusive aceitar wildcars como * e ? - Observação cada arquivo será compactado individualmente e o arquivo original será substituído por <arquivo>.gz

Compactação de arquivo sem a substituição do arquivo original (redirecionamento do arquivo compactado):
gzip -c <arquivo> > <arquivo_compactado>

Descompactação de arquivo, substituindo o arquivo original pelo arquivo descompactado:
gzip -d <arquivo>.gz, onde <arquivo>.gz pode inclusive aceitar wildcars como * e ? - Observação cada arquivo será descompactado individualmente e o arquivo original será substituído por <arquivo>

Descompactação de arquivo sem a substituição do arquivo original (redirecionamento do arquivo descompactado):
gzip -dc <arquivo>.gz > <arquivo_descompactado>