quarta-feira, 2 de novembro de 2011

Acelerando Shellscript - Parte 1

Este material que vou postar é um exercício que tem por objetivo trabalhar com arquivos texto. O Shell entende tudo como arquivo texto, porém para conseguir recortar um cabeçalho ou um rodapé, efetuar cortes horizontais e verticais em listas, trabalhando com ordenação exige um entendimento de como se usar comandos como: head, tail, sort, grep, cut... então aí vão alguns exemplos.

Primeiro é necessário um arquivo de texto para se trabalhar. Utilizando o comando wget vamos fazer um download de um arquivo que é uma lista de preços identada de um site qualquer:

wget http://www.navenet.com/home/lista/ListaNave.txt

Agora com o terminal testar os comandos que fazem parte de um Shellcript abaixo.


#!/bin/bash

echo "1. [0,5] Mostre o cabeçalho do arquivo (somente as linhas antes do inicio dos produtos);"
cat ListaNave.txt | head -4
echo "2. [0,5] Mostre o rodapé do arquivo (somente as linhas após a listagem dos produtos);"
cat ListaNave.txt | tail -8
echo "3. [0,5] Mostre os últimos 25 produtos;"
cat ListaNave.txt | tail -4080 | head -4072 | tail -25
echo "4. [1,0] Mostre os 19 primeiros produtos, em uma lista com as linhas numeradas;"
cat ListaNave.txt | tail -4080 | head -4072 | head -19 | nl
echo "5. [1,0] Mostre somente os produtos (sem as linhas do inicio e do final do arquivo)"
cat ListaNave.txt | tail -4080 | head -4072
echo "6. [0,5] Quantos produtos existem nessa listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | wc | cut -d" " -f4
echo "7. [0,5] Mostre somente os produtos para impressora;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IMPRESSORA
echo "8. [1,0] Quantos nobreaks (ou UPS) possui a listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i -E '(NOBREAK|UPS)'
echo "9. [1,0] Mostre os produtos sem as linhas verticais (pipes) presentes na listagem;"
cat ListaNave.txt | tail -4080 | head -4072 | sed y/"|"/" "/
echo "10. [1,0] Ordene a lista em ordem de código;"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k2 -n
echo "11. [1,0] Mostre a listagem dos produtos em ordem alfabetica (não pelo código);"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k3
echo "12. [1,0] Mostre os DVD, somente os para carro;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'DVD P/CARRO'
echo "13. [1,0] Informe somente o código e o preço dos 5 produtos mais caros;"
cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k4 -n -r | head -5
echo "14. [1,0] Qual são os Ipad 2 da lista de produtos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'ipad2'
echo "15. [1,0] Crie um arquivo com as câmeras panasonic ;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'panasonic' | grep -i 'camera' > camerapanasonic.txt
echo "16. [1,0] Crie um arquivo com os 8 primeiros produtos e os 13 últimos em uma lista com o"
echo "cabeçalho e o rodapé;"
cat ListaNave.txt | head -4 > lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | head -8 >> lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | tail -13 >> lista.txt
cat ListaNave.txt | tail -8 >> lista.txt
echo "17. [1,5] Ordene a lista pelo preço: os mais produtos baratos no início da listagem;"
#cat ListaNave.txt | tail -4080 | head -4072 | sort  -t"|" -k4 -n
cat lista.txt | head -25 | tail -21 | sort  -t"|" -k4 -n
echo "18. [1,5] Quais são os 10 telefones BlackBerry mais baratos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'blackberry' | grep -i 'celular' | sort -t"|" -k4 | head -10
echo "19. [1,5] Crie uma nova listagem com: o cabeçalho do arquivo (questão 1) + as 10 filmadoras"
echo "mais baratas (questão 16) e o rodapé do arquivo (questão 2) em arquivo chamado:"
echo "ListaFilmadoras.txt"
cat ListaNave.txt | head -4 > ListaFilmadoras.txt
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'filmadora' | sort -t"|" -k4 -n >> ListaFilmadoras.txt
cat ListaNave.txt | tail -8 >> ListaFilmadoras.txt
echo "20. [2,0] Crie um arquivo com a listagem de produtos para IPAD (não incluir para IPAD 2),"
echo "sem repetição. Compacte o arquivo em formato ZIP ou TAR.GZ."
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IPAD | sort -u | grep -v 'IPAD2' | grep -v 'IPAD 2' > listaipad.txt
tar czvf listaipad.txt listaipad.tar.gz

Nenhum comentário:

Postar um comentário