segunda-feira, 23 de junho de 2014

Listagem de diretórios vazios

Para listar os diretórios sem arquivos dentro uma maneira é utilizar o seguinte comando:

  find "/L1_TERRA/2011_01/tif/" -type d -depth -empty -print -exec \rm -rf {} \;

Caso necessário encontrar arquivos vazios o comando é:
find . -maxdepth 1 -empty -type f -exec rm  {} \;


Para apagar arquivos com mais de 30 dias:
find /logs/virs375/log_cron_sh_20* -ctime +30 -exec /bin/rm {} \; 


terça-feira, 13 de maio de 2014

Modificações no tipo de geometria no Postgis 2.0



Quando criei este post meu problema e solução foi este:
Depois de criado uma tabela espacial no banco Postgresql eu fui ver meus dados utilizando o Quantun GIS. Notei que não estava aparecendo na listagem das layers disponíveis aquela que me interessava. Para corrigir o problema descobri que a partir da versão 2.0 do Postgis o controle das minhas layers deixou de ser uma tabela e passou para uma view do sistema (ver detalhes em http://postgis.refractions.net/docs/using_postgis_dbmanagement.html#Manual_Register_Spatial_Column).

Enfim para resolver a receita é a seguinte:

  ALTER TABLE footprint_noaa ADD COLUMN geom2 geometry(MULTIPOLYGON,4291);

  UPDATE footprint_noaa
   SET  poligono=r.gm
   from
   (
Select st_multi(the_geom)::geometry(MultiPolygon, 4291) as gm ,gid from footprint_noaa
   ) as r
   WHERE footprint_noaa.gid = r.gid;
 
   ALTER TABLE footprint_noaa DROP COLUMN the_geom;
 
   ALTER TABLE geom2 RENAME footprint_noaa TO the_geom;
 
Assim a tabela ficou devidamente registrada na GEOMETRY_COLUMNS e o quantum-gis entendeu tudo direitinho.

Depois disto eu aprendi outra maneira mais correta e direta da seguinte maneira:


ALTER TABLE my_table
    ALTER COLUMN geom TYPE geometry(LineString, 4326) 
    USING ST_SetSRID(geom, 4326);

sexta-feira, 4 de outubro de 2013

Validação de Datas em Bash

Para fazer uma validação de um numero inteiro se ele representa uma data válida é possível utilizar o seguinte comando shell:

if (date --date 20050214 > /dev/null 2>&1); then echo "data valida"; else echo "data INVALIDA" ; fi

isto foi utilizado para selecionar um conjunto de arquivos que varia em um intervalo de dias, da seguinte maneira

data_inicio='20050115'
data_fim='20050215'
dir_dados='/dados'

for a in $( seq ${data_inicio} ${data_fim})
do
  if (date --date "$a" > /dev/null 2>&1)
    then
      #echo "data valida"
      ls -d "${dir_dados}/*${a}*" >> ${lista_W}
  fi
done


Que neste caso joga para uma lista o path com os dados para serem utilizados em outro processo.

terça-feira, 1 de outubro de 2013

Como identificar o último dia do mês

Estive procurando uma forma para saber qual o último dia do mês corrente, e encontrei uma referência que fazia uma tabela como esta apresentada abaixo.

Jan - 31 days
Feb - 28 days / 29 days (leap year)
Mar - 31 days
Apr - 30 days
May - 31 days
Jun - 30 days
Jul - 31 days
Aug - 31 days
Sep - 30 days
Oct - 31 days
Nov - 30 days
Dec - 31 days

Para isto foi utilizado o seguinte código bash:

for m in {1..12}; do
  date -d "$m/1 + 1 month - 1 day" "+%b - %d days"; 
done

Portanto, adaptando este código podemos fazer o seguinte

data_atual="20131001"
ultimodia=$(date -d "${data_atual} + 1 month - 1 day" +%Y%m%d )
echo ${ultimodia}
% 20131031

A principal diferença é que estamos passando o ano que pretendemos avaliar e com isto saber se é biossesto ou não.

segunda-feira, 4 de fevereiro de 2013

Como renomear arquivos no linux

Para converter os nomes de um conjunto de arquivos para que todas as letras fiquem minúscula basta utilizar o seguinte comando:

rename 'y/A-Z/a-z/' *

Todos os arquivos no diretório corrente serão convertidos.

Fonte de referência: http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html

sábado, 6 de outubro de 2012

Como definir o tipo dos dados em um CSV no QGis?

Para permitir que o Quantum GIS abra um arquivo do tipo CSV de modo que cada coluna seja formatada adequadamente, é necessário criar um outro arquivo descritor para especificar o tipo de cada uma das colunas que será importada.

Por padrão todos os dados de um CSV são adicionados como uma tabela utilizando o driver OGR que não trata as colunas por tipos diferentes, sendo todas abertas como do tipo String. A solução é criar um arquivo.csvt contendo apenas o tipo de cada coluna, por exemplo:

Para o arquivo de entrada apresentado abaixo, cujo nome é focos_mensal2010.csv


geocod,jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez,anual
2200202,0,0,0,0,0,0,0,0,1,3,0,0,4
3128006,0,0,0,0,0,0,0,0,5,1,0,0,6
4209805,0,0,0,0,0,0,0,0,1,0,1,0,2
4322152,0,0,0,0,0,0,0,1,5,0,0,0,6
1504208,0,0,0,0,2,0,49,385,445,75,27,0,983

tive que criar o arquivo  focos_mensal2010.csvt com o seguinte conteúdo:
"String","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer","Integer"

Caso seja necessário é possível especificar o tamanho dos campos desta forma

"Integer(6)","Real(5.5)","String(22)"
ref:http://underdark.wordpress.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/


sexta-feira, 17 de agosto de 2012

Como criar uma tabela cruzada no Postgresql

 Uma função que ajudou bastante na construção de tabelas para serem apresentadas no site foi a "crosstab" do Postgresql, que deve ser utilizada da seguinte maneira:


create table estatisticas.br_ano_mes as (
select *
from crosstab('select extract(year from data_pas)::text , extract(month from data_pas)::text, count(gid)::text from focos_referencia
        where pais = ''Brasil''
        group by 1,2
        order by 1,2', 'select m from generate_series(1,12) m')

as ct(ano text, jan text, fev text, mar text, abr text,
mai text, jun text, jul text, ago text, set text, out text, nov text,
dez text));


e o resultado é similar a isto:

ANO Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro
1998 0 0 0 0 0 3.551 8.067 35.551 41.974 23.498 6.804 4.449
1999 1.081 1.284 667 717 1.812 3.632 8.758 39.487 36.914 27.014 8.861 4.376
2000 778 562 849 538 2.097 6.275 4.740 22.204 23.293 27.337 8.399 4.465
2001 547 1.059 1.268 1.081 2.090 8.433 6.490 31.887 39.834 31.038 15.639 6.201
2002 1.654 1.570 1.679 1.682 3.818 10.839 10.769 47.266 61.012 52.073 30.356 11.649
2003 3.603 2.353 3.181 1.902 3.871 10.549 19.391 27.666 57.249 43.058 23.010 15.061
2004 2.330 1.210 1.523 1.057 4.339 13.655 17.960 37.354 66.970 39.161 29.557 17.505
2005 4.047 1.349 1.444 1.211 3.027 4.594 13.988 52.504 63.932 48.879 25.589 5.046
2006 1.885 1.350 902 841 1.765 3.137 6.947 25.682 37.144 16.833 12.805 8.024
2007 1.513 1.179 2.289 850 2.184 4.891 7.031 64.431 94.526 32.312 13.095 4.075
2008 2.125 1.275 1.239 1.253 553 1.287 4.507 14.528 39.445 39.264 12.778 4.995
2009 2.848 1.140 1.392 1.078 2.593 2.962 6.599 17.559 29.430 24.202 23.914 9.494
2010 2.851 2.386 2.417 2.200 3.497 3.642 16.646 75.305 85.415 31.489 16.587 6.856
2011 1.416 973 937 1.152 1.985 4.578 8.524 22.477 50.302 18.691 12.222 9.830