터미널에서 단어 세트를 무한 반복하는 파일을 만드는 방법은 무엇입니까? 세트를 무한 반복하는 파일을 만드는 방법은 무엇입니까?

터미널에서 단어 세트를 무한 반복하는 파일을 만드는 방법은 무엇입니까? 2-4GB 크기의 파싱 목적으로 큰 파일을 만들려면 필요합니다. 현재 크기를 늘리기 위해 붙여 넣기 행을 동일한 파일에 수동으로 복사하고 있습니다.



답변

한 줄을 여러 번 반복하는 쉬운 방법이 있습니다.

yes we have no bananas | head -n 10000 > out.txt

“우리는 바나나가 없습니다”라고 말하는 10,000 개의 줄을 포함하는 out.txt를 생성합니다.


출력을 정확한 바이트 수로 제한하려면 대신 head-c옵션을 사용하십시오 -n. 예를 들어 정확히 10kB의 텍스트가 생성됩니다.

yes we have no bananas | head -c 10000 > out.txt


답변

무한 반복 텍스트를 추천 할 수는 없지만 파이썬으로 ~ 2GB의 반복 텍스트 파일을 만들 수 있습니다 …

python3 -c 'with open("bigfile", "w") as f: f.write(("hello world "*10+"\n")*2*10**7)'

그러면 “hello world”가 10 번 인쇄되고 새로운 줄이 생겨 2 만 번 반복되어 결과가 파일에 기록됩니다 bigfile. 모든 문자가 ASCII 인 경우 각 문자는 1 바이트이므로 작성하려는 내용에 따라 적절하게 계산하십시오 …

CPU가 소유되었을 수 있습니다. 10,000,000 라인 이상을 시도하면 RAM이 부족합니다 …

그래도 토스터를 타요


답변

펄에는 멋진 x연산자가 있습니다 :

$ perl -e 'print "foo\n" x 5'
foo
foo
foo
foo
foo

따라서 간단한 솔루션으로 라인을 몇 백만 번 쓸 수 있습니다. 예를 들어이 명령은 3G 파일을 생성했습니다.

perl -e 'print "This is my line\n" x 200000000' > file

정확한 크기 (이 경우 2GiB)를 지정해야하는 경우 다음을 수행 할 수 있습니다.

perl -e 'use bytes; while(length($str)<2<<20){ $str.="This is my line\n"} print "$str\n"' > file


답변

  • 반복 할 단어 세트를 파일에 넣으십시오 (예 🙂 source.txt. source.txt바이트 단위 의 크기를 가져옵니다 ( 예 :

     stat -c '%s' source.txt
    
  • 대상 파일의 크기를 결정하십시오 (예 : destination.txt2GB 또는 4GB 등). 크기를 바이트 단위로 변환하십시오.

  • 대상 파일 크기를 소스 파일 크기로 나눕니다. bash부동 소수점 산술을 수행 할 수 없지만이 경우에는 필요하지 않습니다.

  • 나누기 결과 시간에 작업 for을 반복 하려면 구문을 사용하십시오 cat source.txt. 이는 반복으로 얻을 수있는 대상 파일 크기와 가장 비슷합니다. 작업의 출력이에 저장됩니다 destination.txt.

예를 들어, source.txt가 30 바이트 라고 가정하고 2GB 파일을 만들려면 다음이 필요합니다.

for ((i=0; i<=((16777216/30)); i++)); do cat source.txt; done >destination.txt

((16777216/30))초기화 시간에 의해 상한 을 설정하고 있습니다. 결과를 얻어 여기에 넣을 수도 있습니다.

작업에는 약간의 시간이 소요됩니다. 가 클수록 source.txt시간이 덜 걸립니다.


답변

while-loop를 사용할 수도 있습니다 .

예 : 내용 foo.txt(이것은 소스입니다) :

foo
bar
foobar

bar.txt비어 있습니다 (대상 파일입니다). 이제 다음 루프를 제거하여 foo.txt여러 번 내용을 쓸 수 있습니다 bar.txt.

while [ $(stat --format "%s" bar.txt) -lt 150 ]
do
    cat foo.txt >> bar.txt
done

설명:

  • stat --format "%s" bar.txt크기를 bar.txt바이트 단위로 표시합니다 .
  • while [ $(stat --format "%s" bar.txt) -lt 150 ] 대상 크기 (이 경우 150 바이트)에 도달 할 때까지 다음 작업이 반복됩니다.
  • cat foo.txt >> bar.txt에 내용을 추가 foo.txt하다bar.txt

답변

먼저 명령을 실행하십시오.

dd if=/dev/urandom of=file.txt bs=2048 count=10

크기가 bs * count 임의 바이트 인 경로에 파일을 작성합니다 (이 경우 2048 * 10 = 20Kb). 요구 사항에 따라 변경할 수 있습니다.

cat - > file.txt

이 명령은 STDIN을 파일로 경로 재 지정하므로 두 행을 입력 한 후 Ctrl + D를 눌러야합니다. 그런 다음 다음 명령을 실행해야합니다.

for i in {1..n}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done

여기서 n은 정수입니다. 원래 두 줄을 복제하여 2 ^ (n + 1) 줄을 가진 파일을 만듭니다. 따라서 16 줄의 파일을 만들려면 다음을 수행하십시오.

for i in {1..3}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done

시작하기위한 몇 가지 숫자가 있습니다.

n=15 will give you 65536 lines (if the original two lines were 'hello' and 'world' the file will be 384Kb)
n=20 will give you 2097152 lines (12Mb file with 'hello' and 'world' as the two starting lines)
n=25 will give you 67108864 lines (384Mb file with 'hello' and 'world' as the two starting lines)


답변

FIFO는 아마도 당신이 찾고있는 것일 것입니다. 주어진 파일로 프로그램을 호출하는 대신 프로세스 대체 를 통해 쉘 명령의 결과를 묶을 수 있으며 프로그램은 출력을 일반 텍스트 파일로 보게됩니다. 여기서 장점은 더 이상 디스크 공간에 의해 제한되지 않으므로 프로그램이 전체 파일을 먼저 버퍼링 할 필요가없고 한 줄씩 구문 분석 할 수있는 한, 그렇지 않으면 불가능한 파일 크기에 도달 할 수 있다는 것입니다. 예를 들어 @hobbs ‘reply를 사용하여 컨텐츠를 생성하십시오.

wc -c <(yes we have no bananas | head -n 5000000000)

이것은 나에게 95GB의 파일을 (wc에 따라) HDD 공간과 거의 모든 RAM에서 무료로 빌려줍니다. 이것은 당신이 얻는 것처럼 “무한”에 가깝습니다.