단 하나의 열과 1000개의 행에 0 값이 있는 데이터 파일을 만들려면 어떻게 해야 합니까?
그것은 다음과 같습니다:
output:
0
0
0
0
0
.
.
.
답변1
답변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과 충돌하지 않는 경우) 과 같은 넓은 범위를 사용하는 것보다 훨씬 느리다는 것을 알 수 있습니다 . 즉, 확장이 잘 되지 않습니다. 가능한 해결 방법은 다음을 사용하는 것입니다.yash
ksh93
awk
yes 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