Ajuda em manipulação

1. Ajuda em manipulação

Douglas
dcscouto

(usa Outra)

Enviado em 06/05/2011 - 23:16h

Boa noite, estou precisando de ajuda para realizar uma tarefa complicada que terei que fazer no trabalho, é o seguinte, trabalho com programação de PABX e vou realizar uma tarefa que terei que selecionar determinados ramais em um arquivo gigante, por isso gostaria de automatizar isso, o modelo do arquivo é mais ou menos assim:

Ramal----Posição----Categoria
100------1-1-10-----1
101------2-3-40-----3
102------1-3-18-----2
103------1-4-50-----2
104------2-0-22-----1

Então eu precisava selecionar em momentos diferentes centenas de ramais aleatórios, a linha inteira, e copia-los para outro arquivo.

Então, existe alguma forma de fazer isso? Preciso somente de uma orientação.
Obrigado a todos...



  


2. Re: Ajuda em manipulação

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 07/05/2011 - 00:15h

Tem sim, se precisar de mais ajuda, depois posso ajudar incrementando mais a solução abaixo, mas no momento, copie o código e faça alguns testes :-)
-----------------
#!/bin/bash
ARQUIVO="seu_arquivo.txt"
QTD_LINHAS=$(cat "$ARQUIVO" | wc -l)
if test "$QTD_LINHAS" -eq 0
then
echo "Não há registros no arquivo"
exit
fi

LINHA=$[RANDOM%$QTD_LINHAS+1]

SORTEADO=$(cat "$ARQUIVO" | head -n $LINHA | tail -n 1)

sed -i /"$SORTEADO"/d "$ARQUIVO"

echo "SORTEADO : $SORTEADO"
echo "$SORTEADO" >> sorteados.txt
--------------------------

Basta colocar as linhas dos ramais no arquivo "seu_arquivo.txt" no mesmo diretório do script, no final ele vai criar o arquivo com os sorteados "sorteados.txt" .
Adapte a vontade, se precisar estamos ai :-)

Abraços


3. Re: Ajuda em manipulação

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 09/05/2011 - 12:37h

Então, não entendi como seria o seu "aleatório", como vc pretende indicar os ramais que devem ser escolhidos?


4. Re: Ajuda em manipulação

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 09/05/2011 - 21:06h

"...eu precisava selecionar em momentos diferentes centenas de ramais aleatórios, a linha inteira, e copia-los para outro arquivo. "

pela interpretação, o a seleção aleatória dele é pela linha :-) (nr da linha)

aliás, será se ele leu as respostas :-)


5. Re: Ajuda em manipulação

Douglas
dcscouto

(usa Outra)

Enviado em 10/05/2011 - 23:17h

Obrigado pelas resposta, me ausentei mas estou de volta...
É o seguinte preciso selecionar por exemplo 7 ramais, definidos por mim e não aleatórios, me expressei errado, e desses ramais selecionar toda a linha e salvar em um arquivo novo.
É isso, obrigado novamente


6. Re: Ajuda em manipulação

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 11/05/2011 - 17:29h

Se voce pretende passar na linha de comando ... tipo:

./busca.sh ramal.txt 100 102
100------1-1-10-----1
102------1-3-18-----2

pode usar isso:

#!/bin/bash
#
arquivo_de_entrada=$1
echo $* | cut -d" " -f2- | xargs -n1 | while read line
do
grep ^$line- $arquivo_de_entrada
done


No caso o primeiro parametro é o nome do arquivo ... os demais são os ramais a serem buscados.

Se quizer jogar em um arquivo de saida ... use algo tipo:

./busca.sh ramal.txt 100 102 > arquivo_de_saida



7. resposta

Douglas
dcscouto

(usa Outra)

Enviado em 11/05/2011 - 22:49h

fdmarp, obrigado pelo post, mas não funcionou não, fiz exatamente como vc colocou e nada, o arquivo de saida fica vazio e se tentar imprimir na tela também. vlw...


8. Re: Ajuda em manipulação

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 11/05/2011 - 22:56h

vc pelo menos leu o que lhe enviei??

Tem sim, se precisar de mais ajuda, depois posso ajudar incrementando mais a solução abaixo, mas no momento, copie o código e faça alguns testes :-)
-----------------
#!/bin/bash
ARQUIVO="seu_arquivo.txt"
QTD_LINHAS=$(cat "$ARQUIVO" | wc -l)
if test "$QTD_LINHAS" -eq 0
then
echo "Não há registros no arquivo"
exit
fi

LINHA=$[RANDOM%$QTD_LINHAS+1]

SORTEADO=$(cat "$ARQUIVO" | head -n $LINHA | tail -n 1)

sed -i /"$SORTEADO"/d "$ARQUIVO"

echo "SORTEADO : $SORTEADO"
echo "$SORTEADO" >> sorteados.txt
--------------------------

Basta colocar as linhas dos ramais no arquivo "seu_arquivo.txt" no mesmo diretório do script, no final ele vai criar o arquivo com os sorteados "sorteados.txt" .
Adapte a vontade, se precisar estamos ai :-)

Abraços


9. Re: Ajuda em manipulação

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 12/05/2011 - 10:29h

Me ocorreu uma coisa ... seu registro é:

100------1-1-10-----1
ou
100 1 1 10 1

se forem espaços ao invés de hífen, use:

#!/bin/bash
#
arquivo_de_entrada=$1
echo $* | cut -d" " -f2- | xargs -n1 | while read line
do
grep ^"$line " $arquivo_de_entrada
done

ou simplesmente

#!/bin/bash
#
arquivo_de_entrada=$1
echo $* | cut -d" " -f2- | xargs -n1 | while read line
do
grep ^$line $arquivo_de_entrada
done



10. Re: Ajuda em manipulação

Douglas
dcscouto

(usa Outra)

Enviado em 12/05/2011 - 23:32h

rai3mb eu li seu e testes seu scripts mas não funcionou, segue um exemplo real do arquivo a ser manipulado, lembrando que devo selecionar alguns ramais que eu escolher. Durante a semana não tenho tempo pra fazer os testes, mas o final de semana está chegando e poderei realizar todos os testes. Obrigado por me ajudarem...


DIR CUST EQU CAT TYPE ICAT AUX
1165 002-1-20-01 2 EL6 0000
1166 002-1-20-02 2 EL6 0000
1167 002-1-20-03 2 EL6 0000
1168 002-1-20-04 1 EL6 0000
1169 002-1-20-05 2 EL6 0000
1170 002-1-20-06 2 EL6 0000
1171 002-1-20-07 2 EL6 0000
1172 002-1-20-08 2 EL6 0000
1173 002-1-20-09 2 EL6 0000
1174 002-1-20-10 2 EL6 0000
3101 002-0-20-07 0 EL6 0000
5205 003-1-20-10 - EL6 0008
5216 003-1-20-11 - EL6 0008
5217 003-1-20-12 - EL6 0008
5234 003-1-20-13 - EL6 0008
5262 001-1-72-10 2 EL6 0000
5263 001-1-72-14 3 EL6 0000
5267 001-1-72-11 20 EL6 0000
5268 001-1-72-15 - EL6 0000
5275 001-1-72-12 2 EL6 0000
5276 001-1-10-11 - EL6 0000
5279 001-1-72-13 20 EL6 0000
5280 002-1-10-00 - EL6 0000
5501 003-1-50-01 - EL6 0000


11. Re: Ajuda em manipulação

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 13/05/2011 - 10:44h

com o arquivo exemplo entendi ...
se você for digitar os ramais como eu tinha explicado:




./busca.sh arquivo_de_ramais 1165 1170

--------------------------------------------------------
#!/bin/bash
#busca.sh
arquivo_de_entrada=$1
echo $* | cut -d" " -f2- | xargs -n1 | while read line
do
grep -w ^"$line" $arquivo_de_entrada
done

-------------------------------------------------------

se for pegar em um arquivo_de_entrada os ramais a serem buscados ... pode usar o busca.sh tb. Crie o arquivo e na hora de chamá-lo use:

for i in `cat arquivo_de_entrada`; do ./busca.sh ramal $i; done

-------------------------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts