![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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 |
|
||||
|
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 |
|
||||
|
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 |
|
||||
|
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. |
|
||||
|
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.. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|