Como criar um arquivo do terminal repetindo um conjunto de palavras infinitamente? Preciso criar um arquivo enorme para fins de análise, como 2 a 4 GB de tamanho. Atualmente, estou copiando manualmente as linhas de colagem no mesmo arquivo para aumentar o tamanho.
command-line
Nisheet
fonte
fonte
mkfifo huge.tmp; while true; do yes "a dummy line" > huge.tmp; done
?Respostas:
Há uma maneira fácil de repetir uma linha várias vezes:
resultará em out.txt contendo 10.000 linhas, todas dizendo "não temos bananas".
Para limitar a saída a um número exato de bytes, use
head
a-c
opção em vez de-n
. Por exemplo, isso gera exatamente 10 kB de texto:fonte
head -c 10000
10 kB em vez dehead -n 10000
10 k linhas.Não recomendo a repetição infinita de texto, mas você pode criar um arquivo de ~ 2 GB de texto repetido com python assim ...
Isso imprimirá "olá mundo" 10 vezes e criará uma nova linha e repetirá 20.000.000 vezes, escrevendo o resultado no arquivo
bigfile
. Se todos os seus caracteres forem ASCII, cada um será um byte, portanto calcule adequadamente, dependendo do que você deseja escrever ...Seu processador pode ser de propriedade. Fico sem memória RAM se tentar fazer mais de 10.000.000 de linhas ...
Estou usando uma torradeira
fonte
Perl tem o
x
operador bacana :Portanto, como uma solução simples, você pode escrever sua linha alguns milhões de vezes. Por exemplo, este comando criou um arquivo 3G:
Se você precisar especificar um tamanho exato (2 GiB neste caso), poderá:
fonte
Coloque o conjunto de palavras a serem repetidas em um arquivo, por exemplo
source.txt
. Obtenha o tamanho desource.txt
, em bytes, por exemplo:Decida o tamanho do arquivo de destino
destination.txt
, por exemplo , 2 GB ou 4 GB ou qualquer outra coisa. Converta o tamanho em bytes.Divida o tamanho do arquivo de destino pelo tamanho do arquivo de origem.
bash
Não é possível fazer aritmética de ponto flutuante, mas não é necessário neste caso.Use uma
for
construção para repetir umacat source.txt
operação vezes o resultado da divisão. Isso seria o mais próximo possível do tamanho do arquivo de destino que você pode obter por repetição. A saída da operação é salva emdestination.txt
.Por exemplo, supondo que
source.txt
seja de 30 bytes e desejemos criar um arquivo de 2 GB, precisamos:Aqui estou definindo o limite superior
((16777216/30))
no momento da inicialização; você pode obter o resultado e colocá-lo aqui também.A operação levaria algum tempo; quanto maior
source.txt
, menos tempo será necessário.fonte
destination.txt
uma vez para cada iteração do loop?Você também pode usar um
while
loop.Exemplo: Conteúdo de
foo.txt
(Esta é a sua fonte):bar.txt
está vazio (este é o seu arquivo de destino). Agora você pode executar o seguinte loop para gravar o conteúdofoo.txt
várias vezesbar.txt
:Explicação:
stat --format "%s" bar.txt
exibe o tamanhobar.txt
em bytes.while [ $(stat --format "%s" bar.txt) -lt 150 ]
as ações a seguir serão repetidas até que o tamanho do destino (neste caso, 150 bytes) seja atingido.cat foo.txt >> bar.txt
anexar o conteúdo defoo.txt
parabar.txt
fonte
primeiro de disparar o comando:
criará um arquivo no caminho de tamanho bs * count bytes aleatórios, no nosso caso 2048 * 10 = 20Kb. isso pode ser alterado conforme o requisito.
Esses comandos redirecionam STDIN para um arquivo, portanto, você precisará inserir duas linhas e pressionar Ctrl + D. Então você precisará executar o seguinte comando:
Onde n é um número inteiro. Isso criará um arquivo com 2 ^ (n + 1) linhas, duplicando as duas linhas originais. Então, para criar um arquivo com 16 linhas, você faria:
Aqui estão mais alguns números para você começar:
fonte
Provavelmente, os FIFOs são o que você está procurando. Em vez de chamar seu programa com um determinado arquivo, você pode vincular o resultado de um comando do shell a ele via subtítulo do processo e o programa verá sua saída como um arquivo de texto sem formatação. A vantagem aqui é que você não está mais limitado pelo espaço em disco, para poder atingir tamanhos de arquivo que seriam impossíveis, caso contrário, desde que o seu programa não precise armazenar o arquivo inteiro em primeiro lugar e apenas possa analisá-lo linha a linha. Por exemplo, usando a resposta de @hobbs para gerar conteúdo:
Isso me empresta um arquivo de 95 gigabytes (de acordo com o wc) sem nenhum custo no espaço do disco rígido e quase nenhuma RAM, apenas o suficiente para armazenar em buffer o que o comando retorna antes de ser lido. Isso é o mais próximo possível do "infinito".
fonte