Bash One Liners #1
Recentemente passei a trabalhar em um projeto que faz muito
uso de Bash (ou Shell Script, o termo mais popular no Brasil).
Passei, desde então, a prestar mais atenção em construções corriqueiras
como um history | grep, descobrindo formas de resolver com diferentes
programas baseados em linha de comando tarefas pequenas (ou não) do dia-a-dia. Esses
programas (sort, grep, sed, awk, entre outros) tornam-se muito mais úteis, claro,
quando podem ser combinados através de um pipeline. Quando conseguimos
combinar programas Linux em 1 só comando compacto, acabamos de criar um
programa one liner (de uma só linha).
É possível que esses programas funcionem em qualquer shell que você escolher (csh, ksh, entre outros), mas como há algumas diferenças na sintaxe dessas implementações, intitulei a série “Bash One Liners”, pois é apenas no Bash que as soluções serão testadas. Para saber que Shell você utiliza digite, num terminal:
echo $SHELL
Sem muita pretensão, irei publicar aqui no blog soluções one liners que criei (ou copiei) para resolver problemas no trabalho. Todos os artigos terão a mesma estrutura, que basicamente descreve o problema inicial, os programas utilizados na solução, e como a solução pode ser construída através de pipelines. Vamos ao primeiro!
Problema: tenho um arquivo com uma lista de nomes que eu gostaria de ordenar, colocando um asterisco à frente de cada linha, para formar uma “bulleted list”.
Solução inclui: sort e awk.
Exemplo: temos um arquivo types.txt com o seguinte conteúdo:
decimal
integer
float
datetime
date
timestamp
time
text
string
binary
boolean
Nossa transformação é feita em 2 passos. No primeiro ocorre a ordenação:
$ sort types.txt
Que devolve o texto na saída padrão como:
binary
boolean
date
datetime
decimal
float
integer
string
text
time
timestamp
Com um pipe podemos direcionar essa saída para a entrada do Awk, que irá imprimir cada linha precedida por um asterisco e um espaço em branco:
$ sort types.txt | awk '{print "* " $0}'
* binary
* boolean
* date
* datetime
* decimal
* float
* integer
* string
* text
* time
* timestamp
Problema resolvido!
Junho 17th, 2008 às 10:22 pm
Bem interessante.
Aqui deu certo!!