как создать столбец с нулевыми значениями в shell?

"cat -n" добавит номера строк. Например: ls | cat -n

5
06.08.2016, 00:53
5 ответов
python2 -c 'print "0\n" * 1000' > file.txt
2
27.01.2020, 20:31
Можно использовать

seq :

seq 0 0 0 | head -1000
0
27.01.2020, 20:31

Просто,

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

или используя для цикла ,

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 , а также означает сохранение всего диапазона в памяти (возможно, несколько раз). Вы обнаружите, что он становится намного медленнее (если он не дает сбой для OOM), чем использование awk или yes 0 | напор ... для больших диапазонов, например {1..10000000} . Или, другими словами, он плохо масштабируется. Возможный обходной путь - использовать

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

( ksh93 / zsh / bash ), не будет проблем с памятью, но все равно будет иметь порядок ] медленнее, чем специальный инструмент или подход на реальном языке программирования.

8
27.01.2020, 20:31

Вы можете использовать yes (1) для этого (подключено к head (1) ...):

yes 0 | head -n 1000 > data_file_with_a_thousand_0s.txt

и если вам нужен миллион нулей, замените 1000 с 1000000

PS. В прежние времена голова -1000 было достаточно, поскольку сегодня эквивалентно голова-1000 .

11
27.01.2020, 20:31
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
6
27.01.2020, 20:31

Теги

Похожие вопросы