kika: (Default)
[personal profile] kika
Как в шелле создать файл длиной N (или даже M) байт, состоящий сплошь из символов 'X' (или 'A') ?

Я легко придумал решение, но оно поражает даже меня своим идиотизмом.

Date: 2009-04-26 07:57 pm (UTC)
From: [identity profile] dmzlj.livejournal.com


for a in  $(seq 1 30); do echo -n A; done;



как-то так? я правда не сисадмин, и это скорее баш - ну, честно старался не пользоваться каким-нибудь перлом.

Date: 2009-04-26 07:59 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Ну что бы в файл, тогда так:

 echo `for a in  $(seq 1 30); do echo -n A; done;` > qqq

Date: 2009-04-26 08:01 pm (UTC)
From: [identity profile] kika.livejournal.com
Легко можно врезаться в максимальную длину строки. N ведь может быть и миллионом (собственно я хотел создать мегабайт букв Z).

Date: 2009-04-26 08:05 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
ну тогда как-то так:

for a in  $(seq 1 1000000); do echo -n A >> qqq; done;


надеюсь, миллион записей туда запишется до того, как я отвалюсь спать. А на шелле это делать - обязательно?

Date: 2009-04-26 08:05 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
отработало.

Date: 2009-04-26 08:11 pm (UTC)
From: [identity profile] kika.livejournal.com
Да, это решение элегантнее моего, хотя мое наверное эффективнее.

Собственно, я использовал
cat /dev/zero | tr '\000' 'Z' | dd bs=1 count=N > file

Date: 2009-04-26 08:11 pm (UTC)
From: [identity profile] kika.livejournal.com
после чего подумал что я наверное идиот.

Date: 2009-04-26 09:33 pm (UTC)
From: [identity profile] squadette.livejournal.com
это решение пахнет Хаскеллом

Date: 2009-04-26 10:01 pm (UTC)
From: [identity profile] kika.livejournal.com
Я сначала хотел написать "ты меня пугаешь", а потом подумал что это еще непонятно кто сильнее меня пугает, ты или я сам.

Date: 2009-04-26 09:54 pm (UTC)
From: [identity profile] furry.livejournal.com
Я тоже первым делом про dd подумала. Мне кажется, максимально масштабируемый вариант, anyway.

Date: 2009-04-27 02:33 am (UTC)
From: [identity profile] dmzlj.livejournal.com
извращенно. но наверное да, быстрее.

Date: 2009-04-27 03:40 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Ну тогда, наверное, лучше было так:

cat /dev/zero | head -c 1000000 | tr '\0x000' 'A' > file


собственно, использовать tr была первая мысль, только я что-то сразу не нашелся, на что его натравить.

Date: 2009-04-27 03:54 am (UTC)
From: [identity profile] d1f.livejournal.com
и вам премию за cat.

Date: 2009-04-27 03:53 am (UTC)
From: [identity profile] d1f.livejournal.com
вручаю вам виртуальную премию за бессмысленное использование программы cat.

Date: 2009-04-27 04:23 am (UTC)
From: [identity profile] kika.livejournal.com
А вам за "экономию 10-ти наносекунд в середине очень короткого цикла"(с)

Date: 2009-04-27 04:51 am (UTC)
From: [identity profile] dvonk.livejournal.com
"собственно я хотел создать мегабайт букв Z"

с возрастом запросы меняются, да

Date: 2009-04-27 11:13 am (UTC)
From: [identity profile] kika.livejournal.com
Знал бы ты почем они идут на нашем колхозном рынке...

Date: 2009-04-26 09:50 pm (UTC)
From: [identity profile] msh.livejournal.com
э-э-э (не читая комментов) ..

dd if=/dev/zero bs=1 count=$M | tr '\000' 'X'

Date: 2009-04-26 09:54 pm (UTC)
From: [identity profile] msh.livejournal.com
.... прочитав комменты ужаснулся

Date: 2009-04-26 09:56 pm (UTC)
From: [identity profile] jsn.livejournal.com
мне прям интересно, что ты придумал. "echo [ESC]10000a" ? :)

Date: 2009-04-26 10:05 pm (UTC)
From: [identity profile] jsn.livejournal.com
do they speak bash there in чо-чо? не, ну ты-то что придумал?

Date: 2009-04-26 10:07 pm (UTC)
From: [identity profile] kika.livejournal.com
http://kika.livejournal.com/79998.html?thread=800126#t800126

я собственно не понял что за конструкция с [ESC]

Date: 2009-04-26 10:12 pm (UTC)
From: [identity profile] jsn.livejournal.com
а. а я чего-то решил, что "в шелле" значит "без dd и вообще чего-либо внешнего".
конструкция с esc для интерактивного баша, конечно.

Date: 2009-04-26 10:19 pm (UTC)
From: [identity profile] kika.livejournal.com
я почему-то был уверен что с миллионом не получится. но сейчас попробовал - и отлично получилось. Только echo [esc]1000000a >file дает файл размером 1000001 байт :-)
что для меня безразлично, но как-то неаккуратненько.

Date: 2009-04-26 10:25 pm (UTC)
From: [identity profile] jsn.livejournal.com
не, ну echo -n, разумеется.

Date: 2009-04-26 09:59 pm (UTC)
From: [identity profile] msh.livejournal.com
не могу не доставить лулзов

$ printmany
Usage: printmany <size> <hexcode>


Date: 2009-04-26 10:04 pm (UTC)
From: [identity profile] kika.livejournal.com
В девятой федоре такого нету.

Date: 2009-04-26 10:05 pm (UTC)
From: [identity profile] msh.livejournal.com
Это очень проприетарная программа!

Date: 2009-04-27 03:40 am (UTC)
From: [identity profile] msh.livejournal.com
Я человек ушибленный ash-ем от BusyBox 0.60, каких только проприетарных программ у меня не появилось!

Date: 2009-04-27 01:29 am (UTC)
From: [identity profile] evolver.livejournal.com
идиотизм в стиле кумар-патела:
outName=myfile; count=1000000; exeName=/tmp/chargen.$$; (echo "#include <stdio.h>^Mint main(int argc, char** argv){for(int i=0;i<$count;++i)printf(\"A\");return 0;}" | gcc -x c++ -lstdc++ -o $exeName -) && $exeName > $outName ; rm -f $exeName

Date: 2009-04-27 02:42 am (UTC)
From: [identity profile] jsn.livejournal.com
c-golf, huh.
main(_){while(_++<=1000)putchar('a');}

Date: 2009-04-27 03:54 am (UTC)
From: [identity profile] kika.livejournal.com
меня особенно умилило -x c++
From: [identity profile] bakabaka.livejournal.com
Проще всего взять N первых байт из бесконечного их потока.
Раз потока произвольных символов нет, используем тот, что есть, и заменяем на то, что нужно.
(Читать из /dev/random было бы извратнее, да.)
(Ну, msh использовал if= вместо cat - по сути почти то же самое)

Date: 2009-04-27 11:03 am (UTC)
From: [identity profile] dottedmag.livejournal.com
Извращения на тему:

yes Z | tr -d '\n' | head -c 1000000 > file


Ну или почти-шеллом :)
awk 'BEGIN { for(i=0; i<1000000; ++i) { printf "Z"; } }' > file

Date: 2009-04-27 11:12 am (UTC)
From: [identity profile] kika.livejournal.com
C yes'ом я тоже пробовал, только я не знал что он параметр понимает и тоже заменял 'y' на 'Z'. Это был бы хороший вариант под виндой, где нету /dev/zero, но под виндой оно не дает убрать конец строки - все равно остается. А в баше (даже виндовом) проще /dev/zero использовать.

Date: 2009-04-27 03:50 pm (UTC)
From: [identity profile] krotoff.livejournal.com
Чего только люди не выдумаю, лишь бы не работать на Си :D

Profile

kika: (Default)
kika

January 2017

S M T W T F S
1234567
89 1011121314
151617181920 21
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 9th, 2025 08:21 am
Powered by Dreamwidth Studios