쉘에서 값이 0인 열을 만드는 방법은 무엇입니까?

쉘에서 값이 0인 열을 만드는 방법은 무엇입니까?

단 하나의 열과 1000개의 행에 0 값이 있는 데이터 파일을 만들려면 어떻게 해야 합니까?

그것은 다음과 같습니다:

output:

0
0
0
0
0
.
.

.

답변1

당신은 사용할 수 있습니다그것은 1)이 목적을 위해(파이프라인됨:머리(1)...):

yes 0 | head -n 1000 > data_file_with_a_thousand_0s.txt

백만 개의 0이 필요하면 다음 1000으로 바꾸십시오.1000000

추신. 과거에는 오늘날 head -1000과 같은 수준이면 head -n 1000충분했습니다.

답변2

간단히,

printf '0\n%.0s' {1..1000}

또는 for루프를 사용하십시오.

for i in {1..1000}; do echo "0"; done

사용 awk,

awk 'BEGIN{for(c=0;c<1000;c++) print "0"}'

@StéphaneChazelas가 지적했듯이 {1..1000}필수 zsh또는 최신 버전을 사용 하거나 전체 범위를 메모리에 저장하는 것을 의미합니다(여러 번 가능) bash. 또는 (OOM과 충돌하지 않는 경우) 과 같은 넓은 범위를 사용하는 것보다 훨씬 느리다는 것을 알 수 있습니다 . 즉, 확장이 잘 되지 않습니다. 가능한 해결 방법은 다음을 사용하는 것입니다.yashksh93awkyes 0 | head ...{1..10000000}

for ((i=0; i<=10000000;i++)); do echo 0; done 

( ksh93/ zsh/ bash) 메모리 문제는 없으나 여전히 크기가 상당합니다.전용 도구나 실제 프로그래밍 언어 방법보다 느립니다.

답변3

perl -e 'print "0\n" x 1000' > file.txt


@Stéphane Chazelas가 지적했듯이 이는 대용량 데이터의 경우 빠르지만 메모리 문제가 발생할 수 있습니다( yes|head이 경우 방법 사용).

성능 비교, 3회 연속 실행 중 가장 좋은 것을 선택

$ time perl -e 'print "0\n" x 100000000' > /dev/null
real    0m0.117s

$ time python -c 'import sys; sys.stdout.write("0\n" * 100000000)' > /dev/null
real    0m0.184s

$ time yes 0 | head -n 100000000 > /dev/null
real    0m0.979s

$ time awk 'BEGIN{for(c=0;c<100000000;c++) print "0"}' > /dev/null
real    0m12.933s

$ time seq 0 0 0 | head -n 100000000 > /dev/null
real    0m19.040s

답변4

seq다음과 같이 사용할 수 있습니다.

seq 0 0 0 | head -1000

관련 정보