como criar uma coluna com valores zero no shell?

5

Como posso criar um arquivo de dados com uma coluna na qual haverá 1000 linhas com valores zero?

algo como:

output:

0
0
0
0
0
.
.

.

    
por zara 05.08.2016 / 07:23

5 respostas

8

Simplesmente,

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

ou usando for loop,

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

usando awk ,

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

Como @ StéphaneChazelas apontou, Usar {1..1000} requer zsh ou versões recentes de bash , yash ou ksh93 e também significa armazenar todo o intervalo na memória (possivelmente várias vezes). Você perceberá que ele se tornará muito mais lento (se não falhar para a OOM) do que usar awk ou yes 0 | head ... para intervalos grandes como {1..10000000} . Ou em outras palavras, não escala bem. Uma solução possível seria usar

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

( ksh93 / zsh / bash ) não teria o problema de memória, mas ainda teria ordens de magnitude mais lento do que uma ferramenta dedicada ou abordagem de linguagem de programação real.

    
por 05.08.2016 / 07:44
11

Você pode usar sim (1) para isso (canalizado para head (1) ...):

yes 0 | head -n 1000 > data_file_with_a_thousand_0s.txt

e se você precisar de um milhão de zeros, substitua o 1000 por 1000000

PS. Antigamente, head -1000 era suficiente, pois equivalia a head -n 1000 hoje.

    
por 05.08.2016 / 07:41
6
perl -e 'print "0\n" x 1000' > file.txt


Como observa Stéphane Chazelas, isso é rápido para números grandes, mas pode ter problemas de memória (use a abordagem yes|head nesse caso)

comparação de desempenho, melhor selecionada dentre 3 execuções contínuas

$ 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
    
por 05.08.2016 / 08:06
2
python2 -c 'print "0\n" * 1000' > file.txt
    
por 05.08.2016 / 11:41
0

seq pode ser usado:

seq 0 0 0 | head -1000
    
por 06.08.2016 / 01:31