The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Fraccionamento av 2 no arquivo em um local determinado com base em textpattern borgeh Programação Shell Script e 0 09-24-2007 08:02
inserir arquivo 1, num determinado local de arquivo 2 JCR Programação Shell Script e 1 02-01-2007 11:48
como editar arquivo grande em unix balireddy_77 Programação Shell Script e 3 12-14-2006 07:40
Ajuda para editar um arquivo grande jxh461 Programação Shell Script e 8 05-19-2003 05:38
como editar arquivos grandes usando vi nazri UNIX para Dummies Perguntas & Respostas 3 06-15-2001 10:18

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 08-29-2007
mvijayv mvijayv is offline
Usuário
  
 

Join Date: Jan 2007
Posts: 16
Editar um ficheiro grande em lugar

Folks,
Eu tenho um arquivo com 50 milhões de registros com 2 colunas. Tenho que fazer a seguir:
1. Gerar alguns números aleatórios de um comprimento fixo.
2. Substitua a segunda coluna de escolhidos aleatoriamente as linhas com o números aleatórios.

Eu tentei usar um pouco de perl para gerar números aleatórios e sed para substituí-lo manualmente. O problema que eu vejo é que ela gera uma saída com o registro substituído com todos os 50 milhões de registros. Eu prefiro não ter a saída gerada para cada linha atualização. Gostaria de obter a saída quando todas as atualizações são feitas ....
Fiquei me perguntando se eu poderia editar o arquivo no local usando sed ... Eu tentar olhar para esta opção no local .. mas eu não ter o GNU versão do SED ...

Quaisquer pensamentos ...?

Obrigado
V
  #2 (permalink)  
Old 08-30-2007
Ilan ilan is offline
Usuário
  
 

Join Date: Jul 2007
Lugares: 101
Aqui está a primeira jogada em sua exigência:
>> 1. Gerar alguns números aleatórios de um comprimento fixo.

i \u003d 00000000
echo $ RANDOM $ i | cut-c 1-8

o acima serve para gerar números aleatórios para mais de 50 milhões de registros; novamente não certo como frequentemente um número repete!

Não é claro quanto à segunda exigência. ser específica, por favor ...

-Ilan
  #3 (permalink)  
Old 08-30-2007
mvijayv mvijayv is offline
Usuário
  
 

Join Date: Jan 2007
Posts: 16
Ilan oi,
Obrigado por tomar o up ... Tenho a primeira peça descobri ... Posso gerar um número aleatório usando uma pequena perl script que eu descarregado da rede ... mas eu tenho um problema com a segunda parte ... Vou tentar descrevê-lo melhor.

Eu tenho 50 milhões de registros com 2 colunas. Ambas as colunas estão presentes em todos os registros.

Passo 1: Criar um valor aleatório (esta é a parte Eu descobri acima)
STEP2: Localizar um registro aleatória entre os 50 milhões
STEP3: Substituir o valor na segunda coluna com o valor gerado na etapa 1.
Step4: Volte para STEP1, gerar um novo valor, procure outra aleatória registro, substituí-lo com este valor e assim sucessivamente durante cerca de um milhão de vezes.

Quero ser capaz de fazer isso no lugar desde sempre que eu substituir um registro utilizando awk, que dá toda a 50 milhões, inclusive de que a mudança como a produção e não tenho redirecionar a saída para outro arquivo, renomeá-lo para o original e começar de novo novamente para a próxima iteração.
O que eu preciso é uma forma de editar o arquivo no local em um loop identificar registos aleatória e alterando a segunda coluna de um milhão de vezes.


O elevado nível requisito é:
Dado um arquivo de 50 milhões de registros, eu tenho que gerar um arquivo que tem 50 milhões de registros, mas tem 1 milhão de registros cuja segunda coluna varia entre a do primeiro arquivo. Talvez haja uma maneira mais fácil de fazer isso ... Mas estou stumped agora ....


Obrigado,
V
  #4 (permalink)  
Old 08-31-2007
ahmedwaseem2000 ahmedwaseem2000 is offline
Usuário
  
 

Join Date: Aug 2005
Local: Bangalore
Lugares: 219
Poderia postar algumas amostra de dados de entrada e saída, para que possamos ser mais claro quanto à exigência.
  #5 (permalink)  
Old 09-03-2007
mvijayv mvijayv is offline
Usuário
  
 

Join Date: Jan 2007
Posts: 16
12123 | 12345678
42142 | 23442253
52315 | 32250205
....
....
...
....
....
cerca de 50 milhões

Agora eu quero escolher aleatoriamente registos e alterar o valor da segunda coluna

Por exemplo, se eu escolho o segundo registro de forma aleatória. Vou mudar a 2 ª coluna para um valor aleatório:

12123 | 12345678
42142 | 53988989
52315 | 32250205
....
....
...
....
....

mesma operação 1 milhão de vezes cada vez escolhendo um registro diferente de forma aleatória.
  #6 (permalink)  
Old 09-03-2007
fazliturk fazliturk is offline
Usuário
  
 

Join Date: Aug 2007
Lugares: 45
Eu tentei o seguinte código no aix, em ksh
Código é longa, mas não existe enquanto etc
deixe dizer o arquivo original origfile

passo 1.

sed s /"|"/" "/ g origfile> tempfile

/ ** Se você não tem sed , você deve mudar "|" com branco com someting * /
/ depois deste seu arquivo original aparece assim 12123 12345678 * /

grep-n "^ $" tempfile> origfile, rm tempfile

/ * depois deste seu arquivo original parecido com isso;
1 12123 12345678
2 42142 53988989

passo 2.
/ ** produzir 1 milhão de números aleatórios e guarde para o RandNumbersFile ** /

passo 3.
/ ** produzir 1 milhão de números aleatórios e guarde para o RandRecordsFile ** /
sort-u RandRecordsFile> tempfile
mv tempfile RandRecordsFile

/ * você pode produzir 1 milhão de números, mas se você ordenar que unically pode ser inferior a 1 milhão. você deve ter certeza de que cada linha nesse arquivo é único, o comando acima trata este * /

deixar "NeededLine \u003d 1000000 - RandRecordsFile` wc-l | awk '(print $ 1)' `"

/ * esta linha mostra quantas novos registros que você precisa após ordenar * /

counter \u003d 0
while [$ contador-lt $ NeededLine]
fazer
/ ** produzir aleatória RandomRecord (meios de números aleatórios). Quer dizer que você deve adicionar o seu código aqui ** /
grep $ RandomRecord RandomRecordsFile> / dev / null
if [$? -ne 0]
então
echo $ RandomRecord>> RandomRecordsFile
deixar "contador \u003d $ contador +1"
fi
feito
sort-u RandomRecordsFile> tempfile
colar tempfile RandNumbersFile> RandomRecordsFile
rm tempfile

/ ** Após esse seu RandomRecordsFile parece isto;
1 12345678
27 53988989
primeira corresponde a um número recorde e rundom o segundo campo (orig segundo campo) ** /

juntar-v1 origfile RandomRecordsFile> tempfile / ** unmatched linhas ** /
juntar-o 1.1,1.2,2.2 origfile RandomRecordsFile>> tempfile / * pareados linhas * /
sort-u tempfile> origfile / * tipo sobre campo1 * /
/ ** se você precisa adicionar estas linhas
cut-f2, f3 origfile> tempfile
sed s / ""/"|"/ g tempfile> origfile ** /
rm tempfile

para que o código é;
/ ** produzir 1 milhão de números aleatórios e guarde para o RandNumbersFile ** /
/ ** produzir 1 milhão de números aleatórios e guarde para o RandRecordsFile ** /

cp yourfile origfile
sed s /"|"/" "/ g origfile> tempfile
grep-n "^ $" tempfile> origfile
sort-u RandRecordsFile> tempfile
mv tempfile RandRecordsFile
deixar "NeededLine \u003d 1000000 - RandRecordsFile` wc-l | awk '(print $ 1)' `"
while [$ contador-lt $ NeededLine]
fazer
/ ** produzir aleatória RandomRecord (meios de números aleatórios). Quer dizer que você deve adicionar o seu código aqui ** /
grep $ RandomRecord RandomRecordsFile> / dev / null
if [$? -ne 0]
então
echo $ RandomRecord>> RandomRecordsFile
deixar "contador \u003d $ contador +1"
fi
feito
sort-u RandomRecordsFile> tempfile
colar tempfile RandNumbersFile> RandomRecordsFile
juntar-v1 origfile RandomRecordsFile> tempfile
juntar-o 1.1,1.2,2.2 origfile RandomRecordsFile
sort-u tempfile> origfile
rm tempfile

Última edição por fazliturk; em 09/03/2007 09:41..
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 09:12.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0