如何创建一个只有一列、其中有 1000 行为零值的数据文件?
就像是:
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
,yash
或ksh93
也意味着将整个范围存储在内存中(可能多次)。您会发现它比使用awk
或yes 0 | head ...
等大范围要慢得多(如果它不会因 OOM 而崩溃){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