Gostaria de ajudar?
Mostrando postagens com marcador linux. Mostrar todas as postagens
Mostrando postagens com marcador linux. Mostrar todas as postagens

segunda-feira, 20 de julho de 2015

O ifort voltou a ter versão Grátis/Free


A intel voltou a disponibilizar uma versão gratuita do seu compilador Fortran ifort. Depois de um ano sem fornecer uma versão gratuita a intel decidiu por voltar a disponibilizar uma versão free para Pesquisador, Estudantes, Professores e Desenvolvedores de Código Aberto.

Algumas mudanças aconteceram como por exemplo:

  • Não haverá mais uma versão para sistemas 32 bits. 
  • Os Sistemas de derivação Linux suportados são:
           Debian* 6.0, 7.0
           Fedora* 20, 21
           Red Hat Enterprise Linux* 5.0, 6.0, 7.0
           SUSE Linux Enterprise Server* 11, 12
           Ubuntu* 12.04 LTS, 14.04 LTS
  • Minimo de 2Gb de memória RAM
  • 100Gb de espaço em HD livre, durante a instalação o software chega a ocupar 12Gb.
  • ...
Para baixar o ifort é só seguir este link. Em breve pretendo criar um tutorial mostrando como instalar e as possíveis novidades do software.

Boa Sorte e Bom Trabalho a Todos!!

segunda-feira, 15 de junho de 2015

Obtendo a saída do comando Shel - GrADS


Olá a Todos,

Algumas pessoas utilizam o GrADS para ler os dados do GFS direto no GrADS Data Server. Em alguns casos pode ser necessário executar um script operacionalmente para efetuar esta tarefa. Um problema que pode existir para ler este tipo de dado (GrADS Data Server) operacionalmente é que por ser um dado de modelo os nomes dos arquivos mudam constantemente e torna-se necessário criar uma variável data para atualizar o nome do dado e efetuar a leitura corretamente.

Por exemplo:

Se você deseja ler o dado do GFS 0.25 deg starting from 00Z07jun2015 a url é a seguinte:

http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/gfs20150607/gfs_0p25_00z

Observe que um dos diretórios onde está armazenado o dado contém a data (em negrito) em que o dado foi gerado ou o modelo foi rodado. Para gerar esta data automaticamente você pode criar um script SHELL e utilizar o comando date e resolver este problema, mas você pode utilizar o GrADS e resolver este problema diretamente no script .gs.

Para isso você pode utilizar o comando date no próprio script .gs . O script fica assim:

'reinit'
'! date +%Y%m%d > date.txt'
date=read('date.txt')
vardate=sublin(date,2)

*Neste caso vardate=20150607
*Observe que o comando date produz uma data diferente pois busca a data do sistema

file='http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/gfs'vardate'/gfs_0p25_18z'

'sdfopen 'file

'!rm date.txt'

Eu não conheço uma outra forma de transformar o comando SHELL em variável, a única forma que conheço é escrevendo a saída do comando SHELL em um arquivo e depois ler este arquivo em seguida criando uma variável. Após a leitura do conteúdo do arquivo date.txt eu sugiro remover ('!rm date.txt') este arquivo para não ocupar espaço.

PS: Os dados do GFS são gerados de 6 em 6 horas para criar uma variável para ler os 4 arquivos você pode gerar as variáveis e utilizar um loop (WHILE) para ler cada arquivo.

Boa Sorte e Bom Trabalho a Todos!!

segunda-feira, 8 de junho de 2015

Duas variáveis em um mesmo campo - GrADS


Olá a todos,

É importante percebermos que ao criar uma figura que será inserida em um artigo para ser publicado precisamos dedicar um pouco de esforço para fazer uma figura com a maior qualidade possível. Muitas vezes seu artigo será mais lembrado pelas figuras do que pelo conteúdo (o conteúdo é mais importante, não é isto que esta em discussão).

PS. Dica para quem tem o GrADS versão 2.

Esta dica é bastante simples, mas pode ser bastante útil quando se deseja criar figuras com alta qualidade. Existem vários comandos no GrADS que te possibilitam gerar uma figura com alta qualidade. No entanto, quando plotamos duas variáveis (sobrepostas) no mesmo campo esquecemos que no GrADS a segunda variável apesar de sobreposta é uma segunda figura (com novos eixos, grades e etc) e por isso é importante inibir a plotagem dos labels dos eixos, as linhas que representam as grades e etc desta segunda variável. Ao inibir o plot do label dos eixos por exemplo você mantêm a qualidade da font das Latitudes e Longitudes por exemplo. Para que isso não ocorra use os comandos abaixo sempre antes do display da próxima variável exibida:

 'd press'
 'set xlab off'
 'set ylab off'
 'set grid off'
 'set mpdraw off'; *(Este comando inibe o plot do contorno dos continentes)
 'd temp'

 *Com o comando 'd temp' apenas os dados de temperatura serão plotados em seu campo. Espero que ajude. 

 Boa Sorte e Bom Trabalho a Todos!!

quinta-feira, 30 de abril de 2015

Imagem de Satelite no Grads

Pergunta do Arthur Lucas,

Olá Cristiano,

tenho visto em alguns artigos com campos meteorológicos sobrepostos a imagens de Satélites, é possível fazer isso no Grads ?

Obrigado,

É sim possível desde que o dado da imagem de satélite seja disponibilizado no formato que seja possível o Grads ler, por exemplo: Binário, Netcdf e etc.

Alguns Institutos disponibilizam algumas imagens em formato binário. Durante meu doutorado eu utilizei dados de temperatura de brilho e consegui plotar algumas figuras de TB com vento e etc. Segue um exemplo: Eu plotei a temperatura de brilho com o shaded do Grads mas e com um RGB em tons de cinza que fica "quase igual" a uma imagem de satélite.





Abraço e Bom Trabalho a Todos!!


terça-feira, 28 de outubro de 2014

cdo merge levels

Olá a Todos,

Recentemente estive tentando usar o comando merge do cdo para criar um arquivo com vários níveis. O problema era o seguinte:

Eu possuo 10 arquivos de vento em formato binário sendo cada arquivo contendo 100 tempos e um nível.

A primeira coisa que eu fiz foi criar arquivos netcdf a partir dos arquivos descritores .ctl através do comando cdo import_binary -f nc *.ctl. No entanto desta forma o cdo não definia o nível referente ao arquivo e sempre atribuía nível 0 (zero). Com os arquivos criados com a descrição de nível 0 (zero) ao juntar (merge) os 10 arquivos o resultado era sempre um arquivo com somente um nível.

Eu não consegui resolver este problema de maneira mais simples o que fiz foi o seguinte:

Utilizei o comando sdfwrite do GrADS para gerar os arquivos netcdf que precisava.

Ex:

set x 1 144
set y 1 73
set t 1 100
set z 1
define uwnd = uwnd
set sdfwrite -4d arquivo1.nc
sdfwrite uwnd
quit

OBS1: É necessário inserir a função -4d do comando sdfwrite, desta forma você força que o arquivo de saída tenha 4 dimensões (lat, lon, tempo, nível)

OBS2: O nível no arquivo ctl precisa ser definido de maneira correta, por exemplo:

          zdef 1 linear 200 1

          Qualquer definição diferente disso deu errado.

Agora que possuía os 10 arquivos .nc utilizei o merge para gerar meu arquivo com os 10 níveis e 100 tempos:

cdo merge arquivo1.nc arquivo2.nc ... arquivo10.nc saida.nc

Boa Sorte e Bom Trabalho a Todos!!

terça-feira, 7 de outubro de 2014

Dado Texto ou ASCII no GrADS

Olá Pessoal,

Através do GrADS é possível escrever e ler arquivos textos e em algum momento isto pode ser de grande utilidade. Recentemente a Giulia de Salve me escreveu com uma dúvida exatamente sobre este contexto.

O Guilherme Martins em sua Apostila já colocou um exemplo bem explicativo e também existe um guia no site do GrADS que é mais explicativo ainda. O que eu vou colocar aqui é exatamente o que esta na página neste guia do site GrADS.

PS. Eu irei utilizar como exemplo o arquivo model.ctl para quem possui o GrADS 2 (opengrads) instalado ele fica na pasta (grads-2.0.1/Contents/Resources/SampleDatasets/).

O GrADS não possui uma função intrínseca para ler arquivos texto como o sdfopen, por exemplo, por isso é necessário alguns ajustes para isso:

Imagine que você possua um arquivo texto/ascii (my_ascii_file.txt) que tenha uma coluna com valores de 1 a 30:

1
2
3
4
...

Você pode transformar este arquivo em um binário e criar um ctl para ler no GrADS.

'open model.ctl'
file = 'my_ascii_file.txt'
datafile = 'my_binary_file.dat'
'set gxout fwrite'
'set fwrite -ap 'datafile
'!/bin/rm -f 'datafile
while (1)
         res = read(file)
         line1 = sublin(res,1)
         line2 = sublin(res,2)
         rc1 = subwrd(line1,1)
         if (rc1); break; endif
              val = subwrd(line2,1)
              'd 'val
endwhile
rc = close(file)
'disable fwrite'

O ctl para ler o dado gerado (my_binary_file.dat), imaginando que você queira plotar os dados com relação ao eixo X, ficaria assim:

dset ^my_binary_file.dat
title Sample of ASCII data converted to binary
undef -9.99e8
xdef 100 linear 1 1
ydef 1 linear 1 1
zdef 1 linear 1 1
tdef 1 linear 01jan0001 1dy
vars 1
a 0 99 ascii variable
endvars

Se você abrir o ctl acima e plotar vai gerar uma figura semelhante a esta:

Uma outra opção é criar arquivos textos a partir de qualquer dado binário através da função 'set gxout print'. A formatação desta função pode ser feita através da função 'set prnopts'. A saída é plotada no terminal mas pode ser armazenada em uma variável e posteriormente através do script ser escrita em um arquivo. O exemplo a seguir escreve 72 números por linha que representa os 72 pontos de grade em X.

'open model.ctl'
'set x 1 72'
outfile = my_ascii_file.txt'
'set gxout print'
'set prnopts %7.3f 72 1'
'd ts'
rc = write(outfile,result)

Desta forma o arquivo my_ascii_file.txt irá conter algo como isso:

Printing Grid -- 3312 Values -- Undef = -9.99e+08
258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 258.493 <etc.>

No caso anterior, observe que a primeira linha do arquivo de saída contem algumas informações sobre o número de valores escritos e valores indefinidos que você pode não querer que seja escrito. O exemplo a seguir omiti essa linha, ou seja, pula a primeira linha de informações de diagnóstico. Além disso neste exemplo a saída será delimitada por vírgulas para importar para uma planilha (excell) por fim a variável apresentada agora é uma expressão em vez de um nome. 

'open model.ctl'
'set x 1 72'
outfile='my_ascii_file.txt'
'!/bin/rm -f 'outfile
'set gxout print'
'set prnopts %g, 72 0'
'd ts-273.15'
i=1
while (1)
    line = sublin(result,i)
    if (line = ''); break; endif
    if (i>1)
    rc = write(outfile,line,append)
    endif
    i=i+1
endwhile

Neste caso o arquivo my_ascii_file.txt conterá algo como:

-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,-14.6567,<etc.>

Obs. A função append serve para inserir os dados no final do arquivo caso ele exista. Se você não utilizar a função append e existir um arquivo de mesmo nome ele será sobrescrito. Para mais informações leia "append".

Por fim é possível escrever informações sobre a grade (lat x lon) além dos dados de mais de uma variável, para isso é necessário salvar o resultado da exibição de cada variável/expressão (incluindo longitude e latitude), para cada ponto de grade individualmente, organizar a estrutura que será escrito no arquivo texto de saída e depois escrevê-lo. Neste exemplo será escrito a longitude, latitude, temperatura da superfície, pressão de superfície e precipitação:

'open model.ctl'
'set x 1 72'
outfile='my_ascii_file.txt'
'!/bin/rm -f 'outfile
'set gxout print'
fmt='%8.3f'
numcols=72
'set prnopts 'fmt' 'numcols' 1'
'd lon'
lon_data = result
'd lat'
lat_data = result
'd ts'
v1_data = result
'd ps'
v2_data = result
'd p'
v3_data = result
i=1
while (1)
    lons = sublin(lon_data,i)
    lats = sublin(lat_data,i)
    line1 = sublin(v1_data,i)
    line2 = sublin(v2_data,i)
    line3 = sublin(v3_data,i)
    if (lons='' | lats='' | line1='' | line2='' | line3=''); break; endif
    if (i>1)
        j=1
        while (j<=numcols)
            str = subwrd(lons,j); lon = math_format(fmt,str)
            str = subwrd(lats,j); lat = math_format(fmt,str)
            str = subwrd(line1,j); v1 = math_format(fmt,str)
            str = subwrd(line2,j); v2 = math_format(fmt,str)
            str = subwrd(line3,j); v3 = math_format(fmt,str)
            record = lon' 'lat' 'v1' 'v2' 'v3
            rc = write(outfile,record,append)
        j=j+1
        endwhile
    endif
i=i+1
endwhile

Obs. A função append serve para inserir os dados no final do arquivo caso ele exista. Se você não utilizar a função append e existir um arquivo de mesmo nome ele será sobrescrito. Para mais informações leia "append".

Neste caso a saída my_ascii_file.txt apresentará a seguinte estrutura:

0.000     -90.000     258.493     669.911     0.000
5.000     -90.000     258.493     669.911     0.000
10.000   -90.000     258.493     669.911     0.000
15.000   -90.000     258.493     669.911     0.000
20.000   -90.000     258.493     669.911     0.000
25.000   -90.000     258.493     669.911     0.000
30.000   -90.000     258.493     669.911     0.000
35.000   -90.000     258.493     669.911     0.000
40.000   -90.000     258.493     669.911     0.000

A um tempo atrás coloquei a disposição uma função que ajuda a escrever um arquivo texto sem muitas complicações. No entanto o arquivo de saída não possui formatação, veja aqui.

Boa Sorte e Bom Trabalho a Todos!

Cristiano






segunda-feira, 11 de novembro de 2013

Script Download Dados ECMWF/ERA-Interin - Parte 1


Quando eu atualizei o link do "novo" servidor de download de dados da Reanalise do Era-Interim o Helber comentou de um script que possibilitava o download. Segue como fazer:

PS. Para entender os parâmetros e como modificá-los não esqueça de lê o segundo artigo (Script Download Dados ECMWF/ERA-Interim - Parte 2), link no final deste post.

O ECMWF está disponibilizando uma API (Aplication Programming Interface) nas linguagens (Python, Perl e Java) para acesso/download dos seus dados via script/terminal. É uma ferramenta extremamente útil para quem esta familiarizado com este tipo de sistema e não quer baixar os dados via site. Eu recomendo!

Eu irei tentar ensinar como usar a API desenvolvida em Python, escolha a linguagem que você melhor trabalha. Todas estas informações estão disponíveis no site da API no ECMWF.

Para instalar a biblioteca (ecmwfapi) você precisará primeiro instalar o programa pip.

O programa pip é uma excelente alternativa para instalar bibliotecas desenvolvidas em python de maneira fácil, através do terminal. Para instalar o pip no Ubuntu execute no terminal os seguintes comandos:

> sudo apt-get install python-pip python-dev build-essential 
> sudo pip install --upgrade pip 

Agora com o pip instalado execute no terminal: (tudo junto separado por espaço)

> sudo pip install https://software.ecmwf.int/wiki/download/attachments/23694554/ecmwf-api-client-python.tgz

Este comando irá instalar a biblioteca, você pode verificar ela instalada no diretório:

/usr/local/lib/python2.7/dist-packages/

Feito isso, agora você irá precisar criar a sua chave de acesso. Quando precisávamos baixar os dados da reanálise do ECMWF assim que escolhíamos os dados o site solicitava os dados pessoais (Nome a Instituição e o email), agora com essa API você gera uma chave, insere no script, e não precisará fazer esta autorização sempre que for baixar, agora ela feita automaticamente via API.

Para criar a chave você precisa se cadastrar no site:

http://apps.ecmwf.int/registration/

Um email de conformação será enviado com seu login e senha, confirme clicando no link. Ao fazer login na pagina abaixo será disponibilizado sua chave de acesso:

https://apps.ecmwf.int/auth/login/

Agora que sua chave já esta disponível é preciso criar um arquivo com o nome (.ecmwfapirc) no seu /home/usuario para o acesso ser automático, Obs: o nome do arquivo é .ecmwfapirc com (.) para ficar oculto e sem extensão.

Neste arquivo você irá inserir:

{
    "url"   : "https://api.ecmwf.int/v1",
    "key"   : "XXXXXXXXXXXXXXXXXXXXXX",
    "email" : "john.smith@example.com"
}

,onde vocé irá substituir XXXXXXXXXXXXXXXXXXXXXX pela sua chave e john.smith@example.com pelo email que você utilizou para efetuar o cadastro.

Feito isso você já pode baixar os dados. O ecmwf disponibiliza um script exemplo para teste. Portanto, crie um script em PYTHON e dentro dele insira as linhas: eu chamei o meu script de exemplo.py


#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer

server = ECMWFDataServer()

server.retrieve({
    'dataset' : "tigge",
    'step'    : "24/to/120/by/24",
    'number'  : "all",
    'levtype' : "sl",
    'date'    : "20071001/to/20071003",
    'time'    : "00/12",
    'origin'  : "all",
    'type'    : "pf",
    'param'   : "tp",
    'area'    : "70/-130/30/-60",
    'grid'    : "2/2",
    'target'  : "data.grib"
    })

Salve e dê permissão de execução:

> chmod +x exemplo.py 

Ao executar este script:

>./exemplo.py

Aparecerá uma série de informações no terminal sobre o sistema, dado e o andamento do Download.

Script Download Dados ECMWF/ERA-Interim - Parte 2

Boa Sorte e Bom Trabalho a Todos.

Script Download Dados ECMWF/ERA-Interin - Parte 2

Agora que já sabemos como instalar a API do ECMWF e já fizemos o teste do download vamos explicar o que cada parâmetro do script (exemplo.py) significa e principalmente se eu precisar baixar um dado onde devo modificar, o que modificar?

No script (exemplo.py) do post anterior:

#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer

server = ECMWFDataServer()

server.retrieve({
    'dataset' : "tigge",
    'step'    : "24/to/120/by/24",
    'number'  : "all",
    'levtype' : "sl",
    'date'    : "20071001/to/20071003",
    'time'    : "00/12",
    'origin'  : "all",
    'type'    : "pf",
    'param'   : "tp",
    'area'    : "70/-130/30/-60",
    'grid'    : "2/2",
    'target'  : "data.grib"
    })

dataset = servidor de dado. O ERA-interim se chama interim (independente se for superfície ou níveis de pressão);
step = time step. Neste exemplo tigge são dados de modelo;
number = número de arquivos;
levtype = nível: sl = surface level e pl = pressure level;
date = intevalo dos dados que você irá baixar;
time = pode ser 00, 06, 12, 18 horas;
origin = este parâmetro se refere ao tigge (qual modelo você irá baixar);
type = dado: an = análise e pf = previsão;
param = variável;
area = para os dados do tigge você pode escolher a área para os dados do ERA-Interim você baixa para o globo todo;
grid = espaçamento de grade;
target = nome do arquivo que será salvo. (Sempre com a extensão .grib o sistema ainda não possibilita baixar em outra extensão, mas esta em fase de construção baixar em Netcdf por exemplo);

Quando eu cheguei neste ponto eu decidi testar este script para baixar os dados de vento zonal para um determinado período e não consegui encontrar o nome exato para o param(variável) foi ai que encontrei esta informação diretamente no site do ECMWF.

Quando você for no site para download do ERA-Interim (aqui) escolha o período, nível (se for o caso), variável e etc exatamente como fazia anteriormente. No entanto, quando você for clicar para fazer o download (Retrieve Grib ou Retrieve Netcdf) você deverá clicar em Views the MARS request e as informações dos seus dados necessárias para você modificar o seu script aparecerão ai é só modificar e sair para o abraço.

Eu fiz um teste para os seguintes dados:

Eu primeiro escolhi no site Pressure Level;
Escolhi janeiro e fevereiro de 2013;
No Select time escolhi (00:00:00, 06:00:00, 12:00:00, 18:00:00)
No Select Level e parameter escolhi U component of wind e level 850
Depois cliquei em Views the MARS request e apareceu o seguinte:

request (desconsidere)

Estimated number of fields: 472 (desconsidere)

retrieve, (desconsidere)
levelist=850,
stream=oper,
levtype=pl,
param=131.128,
dataset=interim,
step=0,
grid=0.75/0.75,
time=00/06/12/18,
date=2013-01-01/to/2013-02-28,
type=an,
class=ei

E o meu script atualizado ficou assim:


#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer


server = ECMWFDataServer()

server.retrieve({
    'dataset' : "interim", (modificado)
    'step'    : "0", (modificado)
    'levelist' : "850", (inserido)
    'stream' : "oper", (inserido)
    'number'  : "all", (removi)
    'levtype' : "pl", (modificado)
    'date'    : "2013-01-01/to/2013-02-28", (modificado)
    'time'    : "00/06/12/18", (modificado)
    'origin'  : "all", (removi)
    'type'    : "an", (modificado)
    'class'    : "ei", (inserido)
    'param'   : "131.128", (modificado)
    'area'    : "70/-130/30/-60", (removi)
    'grid'    : "0.75/0.75", (modificado)
    'target'  : "uwnd.01012013.01022013.grib" (modificado)
    })

No levelist você pode inserir os níveis que precisar. Espero que tenham entendido e principalmente que funcione.

Boa Sorte e Bom Trabalho a Todos.

quinta-feira, 7 de novembro de 2013

Instalando o Climate Data Operator (CDO) com NetCDF, GRIB2 e HDF5


Para instalar o Climate Data Operator (CDO) com suporte para NetCDF, GRIB2 e HDF5. Você pode seguir os seguintes passos:

PS_1. Copie o comando existente dentro das caixas e cole em seu terminal. Isto evita problema de configurações de fonte.
PS_2. Os links de downloads (wget) podem estar desatualizados.
PS_3. Para aqueles que desejam instalar o CDO somente com suporte para Netcdf é necessário instalar a ZLIB, HDF5 e o Netcdf.

Baixe o CDO no site https://code.zmaw.de/projects/cdo/files

Para baixar no Linux use:
PS_4. Você pode baixar a última versão do CDO

wget -c http://ftp.nsysu.edu.tw/FreeBSD/ports/local-distfiles/sunpoet/cdo-1.5.9.tar.gz

Baixe o NetCDF no site http://www.unidata.ucar.edu/downloads/netcdf/index.jsp

ou,

wget -c http://pkgs.fedoraproject.org/repo/pkgs/netcdf/netcdf-4.2.1.1.tar.gz/5eebcf19e6ac78a61c73464713cbfafc/netcdf-4.2.1.1.tar.gz

Baixe o Grib API no site https://software.ecmwf.int/wiki/display/GRIB/Releases

ou,

wget -c https://software.ecmwf.int/wiki/download/attachments/3473437/grib_api-1.9.18.tar.gz

Baixe o Jasper no site http://www.ece.uvic.ca/~frodo/jasper/#download

ou,

wget -c http://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.1.zip

Baixe o HDF5 e zlib no site ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4

Agora iremos começar a instalação.

Primeiro passo:

Em que diretório irá fazer a instalação do CDO? Sugestão /usr/local/cdo (crie a pasta que deseja instalar)

Segundo Passo:

Descompacte os arquivos baixados. Cada arquivo irá gerar uma pasta.

Ex: /home/usuario/Download/netcdf-4

Terceiro Passo: Começo da instalação.

ZLIB

Dentro da pasta da biblioteca execute o comando:

(/usr/local/cdo esta é a sugestão modifique a seu critério) ./configure -prefix=/usr/local/cdo 
make
make check
make install

HDF5

Dentro da pasta da biblioteca execute o comando:

./configure -with-zlib=/usr/local/cdo -prefix=/usr/local/cdo CFLAGS=-fPIC
make
make check
make install

NetCDF

Dentro da pasta da biblioteca execute o comando:

CPPFLAGS=-I/usr/local/cdo/include LDFLAGS=-L/usr/local/cdo/lib ./configure -prefix=/usr/local/cdo CFLAGS=-fPIC
make
make check
make install

Jasper

Dentro da pasta da biblioteca execute o comando:

./configure -prefix=/usr/local/cdo  CFLAGS=-fPIC
make
make check
make install

Grib

Dentro da pasta da biblioteca execute o comando:

./configure -prefix=/usr/local/cdo CFLAGS=-fPIC  -with-netcdf=/usr/local/cdo -with-jasper=/usr/local/cdo
make
make check
make install

Instalando o CDO

Dentro da pasta da biblioteca execute o comando:

./configure -prefix=/usr/local/cdo CFLAGS=-fPIC  -with-netcdf=/usr/local/cdo -with-jasper=/usr/local/cdo -with-hdf5=/usr/local/cdo  -with-grib_api=/usr/local/cdo
make
make check
make install

Desta forma você conseguirá instalar o CDO com suporte para netcdf, HDF5 e Grib.

PS_5. Instalando desta forma os binários de todas as bibliotecas estarão dentro do diretório /usr/local/cdo/bin e se você quiser pode adicionar este PATH no seu .bashrc. Você pode compilar as bibliotecas em pastas separadas a única alteração é indicar os diretórios corretos no momento de compilar o CDO.

PS_6. Excelente apostila para uso do CDO em Português você encontra no site do Guilherme Martins é só clicar aqui e baixar.

Boa Sorte e Bom Trabalho a Todos!!

quarta-feira, 30 de outubro de 2013

Salvando arquivo texto no GrADS

A pedidos de Camila Carpenedo, segue uma dica de como salvar uma ou mais variável em um arquivo texto (.txt, ascii e etc) no GrADS.

A solução para isso é utilizar o comando 'set gxout print' e 'set prnopts ' format ' ' numl ' ' numb ' ' u ' '. No entanto, para que não tenhamos grandes dificuldades irei disponibilizar para vocês o script/função desenvolvida no OpenGrADS Cookbooks

A função é a seguinte:

function fprintf(args)
* Command line argumets
* ---------------------
  expr = subwrd(args,1)
  file = subwrd(args,2)
  format = subwrd(args,3)
  numl = subwrd(args,4)
  numb = subwrd(args,5)
  u = subwrd(args,6)
  if ( file='' )
    say ''
    say 'NAME'
    say '     fprintf - print GrADS variables to a text file'
    say ''
    say 'SYNOPSIS'
    say '     fprintf  expr  txtFile  [format numl numb [u]]'
    say ''
    say 'DESCRIPTION'
    say '     Evaluates the contents of the GrADS expression *expr* writing'
    say '     its values to a formatted text file *txtFile*. On output, the'
    say '     number of values and the undef values are returned; a negative'
    say '     number of values signals an error condition.'
    say ''
    say '     Unlike the output of *set gxout print*, the resulting ASCII'
    say '     file has only the data values and *no header*.'
    say ''
    say 'OPTIONS'
    say '     The optional parameters are the same as the ones required by'
    say '     the GrADS command *set prnopts*, namely'
    say '     format   a C language template for formatting ASCII output.'
    say '              Default is %g.'
    say '     numl     number of values to print per record. Default is 8.'
    say '     numb     number of blanks to insert between values. Default is 1.'
    say '     u        print "Undef" instead of the numerical value for'
    say '              missing data.'
    say 'BUGS'
    say '     The GrADS expression cannot have spaces in it.'
    say ''    
    say 'COPYRIGHT'
    say '     This script has been placed in the public domain'
    say ''
    return
  endif
* Set the display environment and produce buffered ASCII output
* -------------------------------------------------------------
  'set gxout print'
  if ( format != '' )
    'set prnopts ' format ' ' numl ' ' numb ' ' u ' '
  endif
  'display ' expr
   if ( rc!=0 ); return -1; endif
*  Get rid of header line: Printing Grid -- 3358 Values -- Undef = 1e+20
*  but record number of values and undef values for later reference
*  ---------------------------------------------------------------------
   buffer = result
   i = 1; line = sublin(buffer,i)
   n = subwrd(line,4)
   undef = subwrd(line,9)
* Now write the data values to text file: first line...
* -----------------------------------------------------
  i = 2; line = sublin(buffer,i)
  if ( write_(file,line) > 0 ); return -2; endif
* Append subsequent lines
* -----------------------
  i = i + 1; line = sublin(buffer,i)
  while ( line != '' )
    if ( write_(file,line,append) != 0 ); return -3; endif 
    i = i + 1; line = sublin(buffer,i)
  endwhile
  if ( close(file) != 0 ); return -4; endif
* All done
* --------
  say 'wrote ' n ' values to file "' file '"'
  return n ' ' undef ' ' 
function write_(file,line)
   rc = write(file,line)
   return subwrd(rc,1)

Para utilizar a função é simples:

Você deve criar um arquivo .gs contendo a função descrita acima chamada de fprintf.gs. Você pode salvar a função no diretório script do GrADS e desta forma você poderá "chamar" a função da mesma forma que você chamas as funções de barra (cbar, cbarn e etc) somente pelo nome.

Após criar a variável que pode ser uma média, anomalia, serie temporal e etc, basta executar o seguinte comando:

ga -> fprintf variável arquivo.txt

No Cookbooks existe umas outras funcionalidade interessantes que vocês podem aproveitar.

Boa Sorte e Bom Trabalho a Todos!!

segunda-feira, 10 de setembro de 2012

Como instalar/Usar o g2ctl.pl e o wgrib2 no linux

Olá a todos,

Irei mostrar um excelente script em linguagem perl (g2ctl.pl) que nos possibilita gerar um arquivo descritor .ctl ou um template a partir de dados GRIB2. Para utilizar este script é preciso seguir alguns passos.

Primeiro é preciso ter isntalado em seu sistema o Software GrADS na versão 2.0 você pode fazer isso seguindo o post da instalação do GrADS. Ressaltando que é necessário criar uma variável de ambiente para o "gribmap" para isso insira a linha abaixo em seu .bashrc (que vocêencontra em seu /home).

alias gribmap='/usr/local/grads-2.0.1/Contents/gribmap'

Segundo é preciso baixar o script g2ctl.pl no link http://www.cpc.ncep.noaa.gov/products/wesley/g2ctl.html.

Terceiro é preciso instalar o wgrib2, para isso vamos fazer o download do wgrib a partir do link http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/ ou clicando em wgrib2. Após o download execute o seguintes comandos:

> tar -zxvf wgrib.gz

Ao descompactar será preciso mover o diretorio criado para a pasta /usr/local

> sudo mv grib2 /usr/local/

Agora vá até o diretorio

> cd /usr/local/grib2
> sudo make
>sudo make install


Após terminar a instalação verifique a presença do binario wgrib2 na pasta:

>ls -la /usr/local/grib2/wgrib2/wgrib2 “.

Quarto abra o arquivo g2ctl.pl e altere a seguinte linha:

de:
wgrib2=’wgrib2′;
para:
wgrib2=’/usr/local/grib2/wgrib2/wgrib2′;

Feito isso precisamos transformar o script g2ctl.pl em um executável e depois criar uma variável de ambiente para que possamos usar o g2ctl em qualquer diretorio que estejamos, para isso siga os passos:

>chmod +x g2ctl.pl
>sudo mv g2ctl.pl /usr/local/bin

Feito isso abra novamente seu .bashrc e insira a seguinte linha:

export G2CTL=/usr/local/bin

Salve e depois execute:

>source .bashrc

Ok, agora você pode usar o g2ctl.pl, para testar digite no terminal:

>g2ctl.pl -v

Agora que já instalamos o g2ctl e o wgrib vamos usar um pouco:

Arquivos de análise:

ga>g2ctl.pl -0 arquivo_grib2 > arquivo_grib2.ctl (nenhuma opção)

ga>gribmap -0 -i arquivo_grib.ctl (nenhuma opção)

Arquivos de previsão:

ga>g2ctl.pl arquivo_grib2 > arquivo_grib2.ctl

ga>gribmap -i arquivo_grib.ctl

Agora abra o GrADS e teste o ctl para verificar se esta funcionando.

Para template:

ga>g2ctl gfs.t00z.pgrb2bf%f2 > previsao.ctl

ga>gribmap -i previsao.ctl

ou

ga>g2ctl -0 pgb.%y4%m2%d2%h2.f00 > analise.ctl

ga>gribmap -0 -i analise.ctl

Para o template você pode usar as seguintes funções:

%y4 - código para ano com 4 digitos
%y2 - código para ano com 2 digitos
%m2 - código para mês com 2 digitos
%m1 - código para ano com 1 ou 2 digitos
%h2 - código para hora com 2 digitos
%h1 - código para hora com 1 ou 2 digitos
%f3 - código para hora com 3 digitos
%f2 - código para hora com 2 ou 3 digitos
%e - nome do ensemble (especifico para opção -ens).

As principais diferenças entre a sintaxe do grib2ctl.pl e do g2ctl.pl são:
Para arquivos grib versão 2, usamos o script g2ctl.pl para criar ctl. A opção de usar -0 (zero) são passados, para ambos os comandos tanto o g2ctl.pl quanto o gribmap para os arquivos de análise e não para os arquivos de previsão na versão grib 2.
Para arquivos na versão 1, usamos o script grib2ctl.pl para criar ctl. A opção de uso -0 (zero) é passado no comando gribmap para arquivos de análise e a opção -verf é passado no comando grib2ctl.pl para arquivos de previsão. Para saber mais sobre o uso do grib2ctl.pl, como instalar e como usar, clique aqui.

PS. O que é o formato de arquivo GRIB e ctl

Grib é o formato de arquivo binário para armazenar os dados de análise e previsão em algum tipo de forma estruturada. Ctl é um arquivo de controle no formato ASCII que pode ser usado para ler o arquivo Grib.

Ambos os formatos são normalmente utilizados em centros de previsão do tempo e estudos de meteorologia.
Os arquivos CTL pode ser lido e visualizado através do software GRADS, CDAT e outros softwares meteorológicos. Ambos GrADS e CDAT são software livre.

É isso!
Boa Sorte e Bom Trabalho a Todos!



segunda-feira, 2 de julho de 2012

Comandos úteis do editor de Texto Vi

Algumas pessoas utilisam editores de texto com parte gráfica (nedit, gedit, kate e etc) para desenvolver seus scripts, programs e etc. No entanto, muitos desenvolvedores preferem utilizar o editor vi que não possui parte gráfica e é utilizado diretamente no terminal do Linux. Na minha opinião a vantagem de se utilizar o vi é devido ao fato de não ser necessário abrir mais um programa para editar/criar seus scripts. Sem falar no fato de que fazer tudo através de linhas de comando da a sensação de dominar ainda mais o sistema :). Bom segue alguns comandos escenciais para quem usa o vi.

Para fazer uma pesquisa por alguma palavra no texto utilize:

/read -> o comando /read irá procurar a palavra read a partir do começo de seu script/programa/texto/arquivo;
?read -> o comando ?read irá procurar a palavra read a partir do fim de seu script/programa/texto/arquivo;
n -> após encontrar a palavra read se você digitar "n" ele irá procurar a proxíma;
N -> Irá inverter o sentido da pesquisa.

Para mover ou inserir texto utilize:

:1,4d      -> este comando irá apagar as linhas de 1 a 4;
:1,4m 8 -> este comando irá mover as linhas de 1 a 4 para a linha 8;
:1,4t 8  -> diferente do comando acima este copia as linhas de 1 a 4 para a linha 8;
:1,4w <teste>-> agora as linhas de 1 a 4 serão escritas no arquivo "teste";
:r <teste> -> lê o arquivo 'teste' e insere seu conteúdo no documento atual.

Para adicionar texto a um arquivo já existente utilize:

a -> para inserir texto depois do cursor;
A -> para inserir texto no final da linha;
i  -> para inserir texto antes do cursor;
I  -> para inserir texto no começo da linha.

Para substituir um texto já escrito utilize:

cw   -> para mudar uma palavra;
4cw -> para mudar 4 palavras;
C     -> para mudar uma linha;
r      -> para sobrescrever um caractere;
R     -> para sobrescrever a linha inteira;
:%s/existente/nova/g -> este comando serve para substituir todas as palavras "existente" pela palavra "nova".
 
Para cancelar uma função/operação e voltar atrás utilize:

u -> para desfazer a última operação;
.  -> para repetir a última operação.

Para salvar os arquivos ou sair dos arquivos já editados/finalizados utilize:

:w   -> para salvar o que esta na memória em um arquivo/disco;
:q    -> para sair do editor;
:wq -> para salvar e sair do editor;
:x    -> para salvar e sair do editor;
:e!   -> para reeditar, desprezando as mudanças;
ZZ   -> para salvar e sair do editor.
 
Para movimentar o cursor pelo texto (tela/linha) utilize:

0 -> para ir direto para o começo da linha;
$ -> para ir direto para o final da linha;
g -> para ir para a primeira linha do arquivo;
G -> para ir para a última linha do arquivo;
5G -> para ir vai para a linha 5.
 
Para copiar e inserir textos utilize:

yy   -> para copiar uma linha inteira;
5yy -> para copiar 5 linhas;
p     -> para colar logo abaixo do cursor;
P     -> para colar logo acima do cursor.


Para inserir uma linha em branco utilize:

o -> para inserir uma linha logo abaixo do cursor;
O -> para inserir uma linha logo acima do cursor.
 
Para apagar caracter/texto/linha e etc utilize:

x     -> para apagar um caractere;
dw  -> para apagar uma palavra;
dd   -> para apagar uma linha;
5dd -> para apagar 5 linhas;
dG  -> para apagar do cursor até o final do arquivo.
 
Para configurar a sua sessão utilize:

:set nu      -> para mostrar o número de linhas;
:set nonu -> para desligar o comando acima;
:set all      -> para mostrar todas as configurações;
:set list     -> para mostrar os caracteres ocultos.
 
Para rolar o texto/página utilize:

CTRL+f -> para rolar uma tela para baixo;
CTRL+b -> para rolar uma tela atrás;
CTRL+d -> para rolar meia-tela (1/2) para baixo;
CTRL+u -> para rolar meia-tela (1/2) atrás.

Bom galera espero que seja útil.

Boa Sorte e Bom Trabalho a Todos!!

quinta-feira, 28 de junho de 2012

Entendendo o comando cal

No penultimo post nós vimos que podemos retirar informações de data através do comando cal que representa o calendário do Linux. Com o comando cal você pode visualisar (impresso na tela/terminal) o calendário completo de um determinado mês de um determinado ano, sendo o mês representado por (01 a 12) e o ano no formato com 4 algarismos. Aproveite para neste momento ir no seu terminal e digitar cal, você verá algo como:

     Junho 2012      
Do Se Te Qu Qu Se Sá 
                             1  2 
   3   4   5   6   7   8   9 
 10 11 12 13 14 15 16 
 17 18 19 20 21 22 23 
 24 25 26 27 28 29 30

O comando man cal dar acesso ao manual do cal. Segue alguns exemplos de uso do comando cal.

>echo $(cal 06 2012)
você terá como resposta:
Junho 2012 Do Se Te Qu Qu Se Sá 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30


Observe que o comando acima é diferente do comando abaixo:

>cal 06 2012
você terá como resposta:

     Junho 2012      
Do Se Te Qu Qu Se Sá 
                              1  2 
   3   4   5   6   7   8   9 
 10 11 12 13 14 15 16 
 17 18 19 20 21 22 23 
 24 25 26 27 28 29 30

No entanto, o primeiro comando é mais utilisado pois possibilita concatenar com outros comando como cut, awk e etc. E um exemplo do concatenação do comando cal com awk nós vimos no penultimo post.

Um exemplo do uso do comando cal com o comando cut:

>echo $(cal 06 2012) | cut -c1-03
Desta forma você terá como resposta:

Jun

ou seja, cal 06 2012 exibe uma sequência de caracter e eu quero exibir somente o caracter de 1 a 3, isso significa as três primeiras letras do mês em questão (Junho).

Este comando é bastante útil e possibilita retirar diversas informações do sistema, segue mais um exemplo para saber o último dia de cada mês de um determinado ano:

>for mes in $(seq -w 1 12); do echo -n "Ultimo dia do mes $mes/2011 = "; echo $(cal $mes 2011) | awk '{print $NF}'; done
A resposta para este comando é:

Ultimo dia do mes 01/2011 = 31
Ultimo dia do mes 02/2011 = 28
Ultimo dia do mes 03/2011 = 31
Ultimo dia do mes 04/2011 = 30
Ultimo dia do mes 05/2011 = 31
Ultimo dia do mes 06/2011 = 30
Ultimo dia do mes 07/2011 = 31
Ultimo dia do mes 08/2011 = 31
Ultimo dia do mes 09/2011 = 30
Ultimo dia do mes 10/2011 = 31
Ultimo dia do mes 11/2011 = 30
Ultimo dia do mes 12/2011 = 31

Bom pessoal é isso.

Boa Sorte e Bom Trabalho a Todos.




quinta-feira, 14 de junho de 2012

Desvendando o comando chmod, chgrp, chown e etc

Todo usuário Linux experiente ou iniciante alguma vez na vida se perguntou como funciona o gerenciamento de permissões do sistema Linux? Como devemos usar comandos como o chmod, chgrp, chown e etc? Como atribuir permissão root para determinados diretórios ou arquivos? Ou o inverso, como atribuir permissão de usuário comum a arquivos/diretorios root?

O que significa cada letrinha que acompanha o nome do arquivos quando executamos um ls -la da vida?

>ls -la

-rw-rw-r--  1 grupo usuario   253 2012-06-14 00:47 script.f90

Para responder todas essas perguntas eu aconselho vocês darem uma lida em um artigo desenvolvido pelo Armando Martins de Souza na comunidade VivaoLinux.com.br, o artigo é extremamente didático e explicador.

Segue os Links:



Bom espero que vocês aproveitem.

Boa Sorte e Bom Trabalho a Todos

sexta-feira, 8 de junho de 2012

Shell Script loop na data Dia/Mes/Ano

Estes dias eu estava querendo fazer o "loop" em um script shell que possibilitasse variar o mês e o dia com doi algarismos, ou seja, 01, 02, 03, 04 sempre que eu tentava o loop variava 1, 2, 3, 4 e etc. Deve exister algumas outras formas de fazer isto, mas essa foi a que conseguir fazer, espero que ajude.

OBS: Meu amigo Alex Pessoa, fez uma sugestão para melhorar este script, segue!!

#/bin/sh

for ano in $(seq 2000 2004);do
      for mes in $(seq -f %02g 1 12);do
            ultimo_dia=`echo $(cal $mes $ano) | awk '{print $NF}'`; #-> linha nova
            for dia in $(seq -f %02g 1 $ultimo_dia);do #-> modificado
#         for dia in $(seq -f %02g 1 31);do #desta forma todos os meses vão até 31
                  echo "$ano$mes$dia"
            done
      done
done


o resultado deste script é:

20000101
20000102
   .      .   .
   .      .   . 
   .      .   .  
20041231

è isso ae.

Boa Sorte e Bom Trabalho a Todos!!

quinta-feira, 7 de junho de 2012

Utilizando o Cron (Crontab)

O "cron" é um software do sistema Unix (linux) que é responsável por efetuar tarefas agendadas pelo usuário, este sistema vem instalado em todas as distribuições Linux e é ativado logo no boot do sistema. Sua utilização é apropriada para quem deseja que alguma atividade/tarefa seja executada automaticamente pelo sistema no minuto/hora/dia/dia da semana/mês desejado pelo usuário. Você poderá por exemplo agendar a limpeza dos arquivos temporários para toda segunda feira, por exemplo, o o "cron" faz uma verificação a cada minuto para identificar alguma tarefa agendada e desta forma ele executa tal tarefa sempre no período determinado.

Para usar o "cron" você pode usar editores como vi, vim ou simplesmente digitar no terminal crontab -e e editar como se estivesse no vi, por exemplo. O crontab tem a seguinte estrutura de execução:

MM HH DD mm SS US tarefa
  |      |    |      |     |    |      |
  |      |    |      |     |    |      |___tarefa
  |      |    |      |     |    |______usuário
  |      |    |      |     |_________dia da semana
  |      |    |      |____________mês
  |      |    |_______________dia do mês
  |      |__________________hora
  |______________________minuto

A sintaxe é a seguinte:

MM: digite aqui minuto (0-59);
HH: digite aqui hora (0-23);
DD: digite aqui dia do mês (0-31);
mm: digite aqui mês (1-12);
SS: digite aqui dia da semana (0-7) vê Obs 1;
US: digite aqui o usuário responsável pela execução (não coloque nada caso o executor seja o usuário que esta criando a lista no crontab);
tarefa: digite aqui a tarefa a ser executada (script).

Obs 1: Em dia_da_Semana, 0 refere-se a domingo; e 6, ao sábado.
       No caso de dia da semana funciona também as três primeiras letras
       (em inglês) do dia da semana (SUN,MON,TUE,WED,THU,FRI,SAT)
Obs 2: Em qualquer posição pode-se usar o * (asterisco) quando não se
       importar com o campo em questão.
Obs 3: Pode-se utilizar intervalos nesses campos. O caracter para intervalo
       é o - (hifen).
Obs 4: Pode-se utilizar lista de valores nesses campos. O caracter para a
       lista é a , (vírgula).
Obs 5: Qualquer texto colocado após o programa que será executado será
       considerado comentário e não será interpretado pelo cron


Três comandos importantes de edição do crontab vocês precisam saber:

crontab -e usado para editar;
crontab -l usado para listar tarefas agendadas;
crontab -r usado para remover o arquivo ou lista existente no crontab.

Segue alguns exemplos de estrutura do crontab:

0       12      *       *       * /home/usuario/tarefa.sh

O exemplo acima significa que em qualquer mês, dia da semana, dia do mês sempre as 4 horas em ponto o programa tarefa.sh será executado.

Quando você quer que a tarefa seja executada sempre, por exemplo, todos os dias, você digita "*" no local reservado para que dia do mÊs e desta forma todos os dias do mês a tarefa será executada. Isto serve para todas as outras  condições.

Exemplo:

*          *          *          *           * /home/usuario/tarefa.sh

O exemplo acima significa que em qaulquer dia do mês ou da semana, qualquer mês, qualquer hora e minuto o programa tarefa.sh será executado, ou seja, a cada minuto que se passa o programa será executado.

Exemplo:

0       12      *       *       * /home/usuario/tarefa1.sh
0        4      15      *       * /home/usuario/tarefa2.sh 

Observe que no exemplo acima existem duas tarefas agendadas e é desta forma que tem que ser feito uma tarefa logo abaixo da outra, sendo que cada uma com sua configuração temporal especifica, obviamente que as duas tarefas poderiam ser executadas no mesmo momento.

Boa Sorte e Bom Trabalho a Todos!!

quarta-feira, 6 de junho de 2012

Compactando/Descompactando arquivos

Sempre fica a dúvida de qual comando usar para compactar e descompactar arquivos, para usuários Linux o que não falta são extensões de arquivos compactados, .zip, .rar, .tar.gz, .bz2, .tar.bz2 entre outros. Segue uma pequena lista de como compactar e descompactar seus arquivos ou diretorios:

Compactando e Descompactando arquivos .tar:

Este tipo de compactação merece um pequeno resumo sobre sua estrutura.

tar -(parâmetro) arquivo.extensão nome-do-arquivos(s)-a-serem-compactados

Estes parâmetros não usados aleatoriamente eles tem um significado:

-c - cria um novo arquivo tar;
-t - exibe o conteúdo de um arquivo tar;
-p - mantém as permissões originais do(s) arquivo(s);
-r - adiciona arquivos a um arquivo tar existente;
-f - permite especificar o arquivo tar a ser utilizado;
-v - exibe detalhes da operação;
-w - pede confirmação antes de cada ação no comando;
-x - extrai arquivos de um arquivo tar existente;
-z - comprime o arquivo tar resultante com o gzip (visto mais à frente);
-C - especifica o diretório dos arquivos a serem armazenados (note que, neste caso, a letra é maiúscula).



Com este mesmo compactador (tar) é possivél compactar como .tar, .tar.gz, .tar.bz2, para isso sua-se:

Compactando .tar

>tar -cvf arquivo.tar arquivo_1 arquivo_2 arquivo_n ou diretorio

Compactando .tar.gz

>tar -zcvf arquivo.tar.gz arquivo_1 arquivo_2 arquivo_n ou diretorio

Compactando .tar.bz2

>tar  -jcvf arquivo.tar.bz2 arquivo_1 arquivo_2 arquivo_n ou diretorio

Compactando .zip

>zip -r arquivo.zip arquivo_1 arquivo_2 arquivo_n ou diretorio 

Compactando .rar

>rar arquivo.rar arquivo_1 arquivo_2 arquivo_n ou diretorio



Descompactando .tar:

>tar -xvf arquivo.tar (pode inserir o diretorio onde quer descompactar)

Descompactando .tar.gz:

>tar -zxvf arquivo.tar.gz (pode inserir o diretorio onde quer descompactar)

Descompactando .tar.bz2:

>tar -jxvf arquivo.tar.bz2 (pode inserir o diretorio onde quer descompactar)

Descompactando .zip

>gunzip arquivo.zip (pode inserir o diretorio onde quer descompactar)

Descompactando .rar

>unrar arquivo.rar



Site indicado compactando e descompactando.

Boa Sorte e Bom Trabalho a Todos.

terça-feira, 5 de junho de 2012

Comando "date" Linux

Durante o desenvolvimento de alguns programas eu precisei criar uma data formatada, as vezes para baixar dados, gerar título de figuras ou nome de imagens e etc você precisa de uma data formatada para inserir no teu programa/script e etc. Difícil de entender? Eu explico. Imagina que você criou um script .sh que executa um script GrADS para gerar algumas imagens de precpitação por exemplo e você quer que cada imagem seja salva com a seguinte estrutura (prec_anomesdia.gif) sendo que neste caso especifico o parâmetro dia vamos dizer assim seja variável, uma forma de conseguir esta data é utilizando o comando "date" do linux.

Com o comando "date" é possível Exibir e Alterar a data/hora do Sistema, Exibir a data/hora Formatada e Efetuar cálculos com Data e Hora.

A utilização deste comando é fácil basta utilizar alguns parâmetros disponiveis:

%%   um % literal
%a    nome abreviado do dia da semana do idioma (ex.: Dom)
%A    nome completo do dia de semana na localidade (por exemplo, Sábado)
%b
    nome abreviado do mês na localidade (por exemplo, Jan)
%B    nome completo do mês na localidade (por exemplo, Janeiro)
%c    data e hora na localidade (por exemplo, Sáb 08 Mar 2008 18:34:17 BRT)
%C   século; como %Y, exceto a omissão dos dois últimos dígitos (ex.: 20)
%d   dia do mês (ex.: 01)
%D   data; o mesmo que %m/%d/%y
%e   dia do mês, preenchido por espaço; o mesmo que %_d
%F   data completa; o mesmo que %Y-%m-%d
%g   os últimos dois dígitos do ano do número ISO da semana (veja %G)
%G   ano do número ISO da semana ISO (veja %V); normalmente útil só com %V
%h   o mesmo que %b
%H   hora (00..23)
%I    hora (01..12)
%j    dia do ano (001..366)
%k   hora ( 0..23)
%l    hora ( 1..12)
%m   mês (01..12)
%M   minuto (00..59)
%n    um caractere de nova-linha
%N   nanosegundos (000000000..999999999)
%p   o equivalente na localidade para AM ou PM; em branco se desconhecido
%P   como %p, mas em minúsculas
%r    a hora no relógio de 12 horas na localidade (por exemplo, 11:11:04 PM)
%R   hora e minuto no estilo 24 horas; o mesmo que %H:%M
%s    segundos desde 1970-01-01 00:00:00 UTC
%S   segundo (00..60)
%t    uma tabulação
%T   as horas; o mesmo que %H:%M:%S
%u   dia da semana (1..7); 1 é segunda-feira
%U   número da semana no ano, sendo domingo o início da semana (00..53)
%V   número ISO da semana, sendo segunda-feira o início da semana (01..53)
%w   dia da semana (0..6); 0 é domingo
%W   número da semana no ano, sendo segunda-feira o início da semana (00..53)
%x    representação da data na localidade (por exemplo, 31/12/99)
%X    representação da hora na localidade (por exemplo, 23:13:48)
%y    os últimos dois dígitos do ano (00..99)
%Y    ano quatro digitos (por exemplo 2012)
%z    fuso horário numérico +hhmm (por exemplo, -0300)
%:z   fuso horário numérico +hh:mm (por exemplo, -03:00)
%::z  fuso horário numérico +hh:mm:ss (por exemplo, -03:00:00)
%:::z  fuso horário numérico com : para a precisão necessária (por exemplo, -04, +05:30)
%Z   abreviação alfabética do fuso horário (por exemplo, BRT)

Se você for agora (05/06/2012 16:42) e digitar date em seu terminal o sistema te retornará:

>date
>Ter Jun  5 16:42:49 BRT 2012

Existem algumas formas de você combinar os parâmetros listados acima e ter como resultado uma data na estrutura/ordem que você deseja, segue alguns exemplos:

>date +%d%m%Y
>05062012

Caso você queira separar com uma"/" cada informação é só inserir uma barra antes de cada simbolo de "%":

>date +%d/%m/%Y
>05/06/2012 

Para o ano apenas com dois dígitos:

>date +%d/%m/%y
>05/06/12 

É possível manipular apenas a horas: (observe que precisamos inserir ":" para separar horas, minutos e segundos)

>date +%H:%M:%S
>16:42:49

Se você desejar inserir o nome do mês e não o número também é possível: (observe que este comando é preciso esta entre aspas "" e existe um espaço entre um parâmetro e outro caso contrario a informação virá junta).

>date "+%d %B %Y"
>05 Junho 2012

Uma outra informação referente a estrutura anterior é que você pode inserir o "de" em sua data, para isso digite:

>date "+%d "de" %B "de" %Y"
>05 de junho de 2012

Caso precise inserir o dia da semana o comando seria o seguinte:

>date "+%d "de" %B "de" %Y, %A"
>05 de junho de 2012, terça

Este comando é sensacional, se soubermos utilizá-lo bem tiramos bastante proveito dele, para quem trabalha operacionalmente ou quem costuma baixar dados diariamente, fazer imagens/figuras diariamente ou executar um determinado script operacionalmente vai fazer bom proveito dele.

Com o comando date também é possível conseguir datas anteriores ou posteriores. Exemplos:

Em meu script eu preciso de uma data de cinco dias atrás e cinco dias para frente, para isso:

>date +%d/%m/%Y -d "5 days ago"
>31/05/2012

>date +%d/%m/%Y -d "5 days"
>10/06/2012

Também é possivel por exemplo saber a data um mês e dois dias atrás, uma semana e um dia, ou que dia nós teremos caso adicionarssemos 49 horas a nossa data atual?

Um mês e dois dias atrás:

>date -d "1 month ago 2 day ago"
>Qui Mai  3 16:42:49 BRT 2012

Um mês e dois dias a frente:

>date -d "1 month 2 day"
>Sab Jul  7 16:42:49 BRT 2012

Uma semana e um dia atrás:

>date -d "1 week ago 1 day ago"
> Seg Mai 28 16:42:49 BRT 2012

Que dia teremos se adicionarmos 49 horas na data atual?

>date --date "49 hours"
>Qui Jun 7 17:42:49 BRT 2012

Existe uma serie de combinações possíveis, segue alguns exemplos:

Se usarmos o comando:
>date
ou
>date --date=now
ou
>date --date=today
o resultado é o mesmo

>date --date='10 minutes'
>Ter Jun 5 16:52:49 BRT 2012


>date --date='10 seconds ago'
>Ter Jun 5 16:42:39 BRT 2012

>date --date='10 hours'
>Ter Jun 5 02:42:39 BRT 2012

>date --date='tomorrow'
>Qua Jun 6 16:42:49 BRT 2012

>date --date='10 day'
>Sex Jun 15 16:42:49 BRT 2012

>date --date='yesterday'
>Seg Jun 4 16:42:49 BRT 2012

>date --date='1 fortnight'
>Ter Jun 19 16:42:49 BRT 2012

>date --date='1 year'
>Ter Jun 5 16:42:49 BRT 2013

Bom galera é isso, depois eu irei inserir aqui um script que manipula essas datas. Tem um post em um forum de altoria do Rafael Brianezi da Silva no qual eu tomei base para escrever este, segue.

Boa Sorte e Bom Trabalho a Todos!!