シェルで値が0の列を作成するには?

シェルで値が0の列を作成するには?

1つの列と1000行にゼロ値を持つデータファイルを作成するにはどうすればよいですか?

それは次のとおりです。

output:

0
0
0
0
0
.
.

答え1

あなたは使用することができますそれは1)この目的のために(パイプライン化:ヘッド(1)...):

yes 0 | head -n 1000 > data_file_with_a_thousand_0s.txt

百万のゼロが必要な場合は、次のよう1000に置き換えます。1000000

PS。過去には、今日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

関連情報