Script para bilro do FD.

Esse post é uma resposta para a pergunta do bilro, um user do FD (leia FórumDebian).

A questão:

Sou novo por aqui e nesta programação e caso cometa alguma falha peço desculpa!!
A minha duvida é a seguinte: eu queria apartir de um shell script ir ler dados a um outro ficheiro em que os dados se encontram divididos por ‘:’
exemplo:
casa:123:12:14
carro:123:1223:132
etc….

eu gostaria de criar um vector ( ex: coisa[i] ) em que cada indice fosse cada dado da 1º coluna , outro vector para a 2º coluna ( serie[i] ) , etc…
neste caso, coisa[1]= casa ; coisa[2]= carro ; serie[1]= 123….
Caso alguem me podesse dar uma dica agradeço!!

Se quiserem verem o resto do post clique aqui. Lá tu veras o que teve entre a “pergunta” e “resposta” .

Bem… Vamos lá.

Primeiro vou falar o que eu fiz. Temos dois arquivos.

script.sh – Nosso script.
txt — Nossa lista de argumentos.

O nosso arquivo txt contem:

:haus:123:casa:
:bier:456:cerveja:
:welt:789:mundo:
:ein:1:um:

E o nosso script tem isso:

#!/bin/sh

function getInfo() {

cat -n txt | egrep “^ *$1″ | cut -f$2 -d”:”

}

function getLines() {

echo “$(cat -n txt | tail -n1 | cut -f1 -d”:” | cut -f6 -d” “) + 1″ | bc

}

function main() {

NLINES=$(getLines)
X=1

while [ $X != $NLINES ]; do

INFO=$(getInfo $X $1)
echo $INFO
X=$(echo “$X + 1″ | bc)

done

}

main $1

Pronto vou falar de cada fun¢ão seguindo a lista da fun¢ão main.

A getLines retorna quantas linhas o arquivo tem. O comando cat -n txt pega o conteudo do arquivo e gera o número da linha na frente de cada linha de dados, com o | (pipe) jogamos o resultado dele para o tail. O tail -n1 mostra a ultima linha do arquivo e passando para o cut -f1 -d”:” . Cut é o que o nome diz, ele recorta o resultado que queremos na linha. Nesse caso ele vai pegar tudo que estiver atras do primeiro : que ele achar. No caso o nosso número gerado pelo cat -n txt. Depois ainda recortamos as 6 casa em branco geradas pelo cat -n txt retornando apenas o número da ultima linha.

Essa fun¢ão não irá funcionar com um arquivo maior ou igual a 10 linhas. Estou fazendo esse script para mostrar como fazer o trabalho e não a solu¢ão completa.

Ok. Pegamos o número de linhas do arquivo txt e jogamos o valor na variável NLINES. Geramos um “counter” chamado X já com valor 1. Depois fazemos um while simples, ele irá fazer aquela lista de comandos até quando aquela afirma¢ão ($X != $NLINES) for verdade. Chegamos na getInfo.

A getInfo nos mostra qual argumento da linha que apontamos. Comando cat -n txt já falei sobre. O egrep “^ *$1″ é um comando para mostrar as linhas que come¢ão (^) com um ou mais espa¢os em branco e que venha com o valor que eu escolher e fornecer primeiro para a fun¢ão ($1), no nosso caso o número da linha que queremos apontar. Com isso o cut -f$2 -d”:” pega o argumento que estiver atras do valor que nossa variável ($2) fornecerá.

Rodando o script (sh script.sh 2) irá aparecer isso na tela:

haus
bier
welt
ein

Bem dei a dica e meio que apontei o caminho. E lembre-se, esse script não roda perfeito. Ele só aceita 9 linhas no arquivo txt. É apenas uma dica de como fazer o seu programa lá.

~ por umgeher em Abril 4, 2007.

Uma resposta to “Script para bilro do FD.”

  1. Adorei o blog de vocês , muito legal!! parabéns! Se puderem visitar meu site também sobre terapia de vidas passadas http://www.espacoauryn.com .
    abraços

Deixe um comentário