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

2009-11-13

AWK: uma linda linguagem de processamento de texto

Isto não é um post (ceci n'est pas un post ;^), é só um lembrete para mim mesmo, feito aqueles post-its. Você sabe do que estou falando.

Na verdade faz quase três meses que não tenho tido tempo para postar nada, a um ponto que meu ciclo normal de dias de 48 horas estarem se tornando 60,70... e isso é perigoso porque dirijo em São Paulo - apesar d'eu ser polido feito um alemão, de vez em quando eu acho que esse alemão se chama Michael Schumacher, mas garanto que é puro sono, ou seria sonho?

Mas enfim, estou aqui para falar do AWK. Uma linguagem criada na Bell Labs por três programadores: Alfred Aho, Peter Weinberger e Brian Kernighan; que você vê respectivamente na figura abaixo.

A      W      K

O mais famoso dos três certamente é o Kernighan, porque (entre outros motivos) trabalhou junto ao Dennis Ritchie na escrita do livro "The C Programming Language", sobre a linguagem de programação C, criada pelo próprio Ritchie. O livro ficou conhecido como "K&R C" e, bom, é excelente.

O AWK tem três features muito interessantes: manipula tão bem strings quanto números (it isn't a strongly-typed language, got it?), tem suporte a arrays associativos (utilizam texto como índice), além de regex (expressões regulares). A linguagem é muito simples, serve desde para parsear um simples texto (analisar sintaticamente as strings em busca de padrões bem-formados), como criar um banco de dados ou até mesmo produzir complexos cálculos. Al Aho conta na entrevista linkada abaixo, que quando o AWK saiu, algumas financeiras de Wall Street usavam-no para fechar seu balancete. Também é importante notar que, junto com o SED, serviu de inspiração para a criação do Perl.

Na verdade, eu, pessoalmente, só estava tentando resolver um problema que não estava saindo com o SED, resolvi dar uma chance ao AWK e acabei me apaixonando. Uma pausa para um momento cor-de-rosa.

...

Ok, como dizia Clarice Lispector, vamos voltar a falar da morte. ;^)
O básico do AWK seria o seguinte:

  awk padrão { ação }

Por exemplo, supondo um arquivo de texto chamado agenda.txt, contendo dois campos: nome e telefone, poderíamos obter todas as linhas que contêm alguma Maria assim:

  awk '/Maria/' agenda.txt

E poderíamos extrair seus telefones exibindo apenas o segundo campo:

  awk '/Maria/ { print $2 }' agenda.txt

É claro que uma agenda de dois campos ( nome e telefone )  seria bastante incomum, para não dizer artificial. Imagine então uma agenda completa, com nome e sobrenome, telefone, endereço, cep, cidade, etc. Como faríamos para diferenciar a busca do padrão "Maria" nos nomes e não nas ruas, bairros ou cidades? Se você conhece SQL vai naturalmente querer casar o padrão com o determinado campo. Faremos o mesmo, exibiremos todos os telefones (segundo campo), em quem tiver o padrão "Maria" no primeiro campo:

  awk '$1 ~ /Maria/ { print $2 }' agenda.txt

Ou, more C-Styled:

  awk '$1=="Maria"  { print $2 }' agenda.txt

Ou ainda, e já introduzindo condicionais:

  awk '{ if ( $1=="Maria") print $2 }' agenda.txt

Como tudo em TI há muitas formas diferentes de se fazer a mesma coisa, crie aquela que faça sentido para você, desde que consuma o mínimo de processamento e memória o possível ;^). Bom, já lhe mostrei a estrutura básica do AWK, agora vamos generalizá-la:

  awk 'BEGIN  { inicializações }
      padrão1 { ação1 }
      padrão2 { ação2 }
      padrãoN { açãoN }
      END     { ação final }'
  arquivo

Exemplo, vamos contar o número de usuários em nosso sistema, ou seja, vamos contar o número de linhas em /etc/passwd (o mesmo que wc -l):

  awk 'END { print NR }' /etc/passwd 

Aqui não há nenhum padrão a ser casado, apenas exibir no fim do processamento o Number of Records (variável especial NR) do arquivo /etc/passwd. Há diversas variáveis especiais...

Ok, foi bem aqui que o maldito apagão me afetou e, não fosse meu velho parceiro nobreak (que já ouso até a dizer que o nobreak é o mehor amigo do homem, é o cachorro na tomada) nem sei o que teria sido (na verdade o blogger salva de tantos em tantos segundos :^), seja como for, hoje paro por aqui mesmo e ponho um "parte 1" no título.

LINKS
  • Este tutorial do Grymoire é muito legal.
  • Leia na íntegra a entrevista de Al Aho para a Computer World em 2008, aqui.
  • Você vai querer este 1 liner, eu sei.

2009-02-18

[dica] Aprenda a Programar em 10 anos!


Peter Norvig, o Diretor de Pesquisas da Google, mais conhecido pelo seu livro Artifical Intelligence: a Modern Approach (AIMA para os íntimos), o mesmo que escreveu o Remote Agent, um programa para planejar, agendar ações e identificar possíveis falhas da nave Deep Space 1 da NASA - ok, acho que já te convenci que o cara é o cara - escreveu um interessante artigo sobre o aprendizado, mais especificamente o aprendizado de programação, mas a lição parace valer para qualquer atividade, da jardinagem à Topologia.

Vocês podem ler o artigo na íntegra aqui. Ou a tradução do Augusto Radtke aqui. A ortografia levou um par de jabs, mas como ele mesmo disse: "Aprenda inglês. Leia o original deste texto. Essa tradução só está aqui para exercitar o meu inglês, não o seu. (Nota do tradutor)". Obrigado Radtke.


Seguindo o mesmo raciocínio aqui está um artigo do Eric Raymond: How to Become a Hacker. E a tradução do João Victor Martins: Como se tornar um Ráquer. Já disse, aprenda inglês.
Última: How to ask Questions the Smart Way.
Ok, menti, era a penúltima. Outros FAQs do E.Raymond leia aqui.
Ah, quer saber, já que eu estou falando dele mesmo, se você está neste blog talvez tenha ouvido falar do livro The Cathedral and the Bazaar, a tradução está aqui, pessoalmente preferiria chamar bazaar de feira, mas vá lá, leia o livro. ;)

2009-02-05

[dica] Estudantes de computação e o Linux/Unix

O Matuzalém "Matux" Guimarães da comunidade Viva o Linux (VOL) escreveu um interessante artigo endereçado para estudantes de computação interessados em conhecer o Linux/Unix.

Se você está entrando para algum curso universitário de computação ou mesmo está nos semestres iniciais e já ouviu alguém falar sobre o Linux, mas você não entendeu muito bem aqueles termos técnicos ou teve medo de se sentir inferiorizado por fazer aquela pergunta simples, mas que para você é decisiva, então continue lendo este artigo.

Referência: Leia o artigo na íntegra

[script] Defenda seu SSH contra ataques de força bruta

Silvio Soares da Silva Junior postou no VOL um script de Mastah que bloqueia os IPs que tentarem invadir seu servidor SSH. A técnica é simples, após 5 ou mais infrutíferas tentativas de conexão ao servidor serem detectadas no arquivo de log, o IP de origem terá todos os seus pacotes rejeitados:

       iptables -A INPUT -s $ip -j DROP


Obtenha o código-fonte aqui.
Ou leia-o aqui.

[dica] (PC)² lança o sistema CEP Livre

A (PC)² lançou o seu projeto CEP Livre. Trata-se da disponibilização, em formato XML ou CSV, da base de dados de CEPs brasileiros. Com o lançamento desta base de consulta, a (PC)² espera dar a sua contribuição à comunidade de desenvolvedores que buscam esse tipo de informação para incluir em seus sistemas.

O CEP Livre funciona on-line, por meio de requisições HTTP. Em retorno, o sistema devolve um arquivo XML ou CSV, para poder ser utilizado pelos sistemas computacionais. Não é necessário o pagamento de taxas, tão pouco registro prévio.

A (PC)² destaca que este é uma base de dados colaborativa e que os usuários estão, desde já, convidados a colaborar, corrigindo falhas e adicionando novas informações.

Para informações sobre seu uso, correções da base de dados e maiores informações, leia o FAQ do projeto , ou entre em contato pelo e-mail: .


Referência: dicas-l

2009-02-03

[news] Na contramão do mercado, sobram vagas em TI

A Associação Brasileira de Empresas de Tecnologia da Informação e Comunicação (Brasscom) acredita que existem cerca de 30 mil vagas em aberto no segmento de software e serviços.

Maior empresa mundial de serviços de tecnologia, a IBM passou recentemente a dedicar esforços no Brasil para reduzir a lacuna entre o perfil do estudante que sai das universidades e o almejado pelas companhias que têm vagas.

Mais de 80 por cento das contratações da IBM Brasil são para exportação de serviços, segundo Edson Luiz Pereira, executivo de parcerias educacionais da IBM Brasil. Por isso, o desafio da empresa é ter o profissional qualificado na velocidade exigida pelo cliente.

"A crise pode ser, de repente, uma oportunidade para o Brasil, já que a terceirização é uma forma de reduzir custos", disse também Ruth Harada, diretora de cidadania corporativa da subsidiária da IBM.

Referência: Taís Fuoco, da Reuters