シェルスクリプトで2147483647文字のテキストファイルを作成する手っ取り早い方法は無いでしょうか。
C言語を勉強している初心者です。テストケースに使用するため、2147483647文字のテキストファイルが必要です。
以下のシェルスクリプトを実行して作成しようとしましたが、実行時間がかなりかかってしまって、なかなか終わりません。
for i in {0..2147483647}; do; echo -n a; done; > test.txt
もっと手っ取り早く作成する方法はないでしょうか。
中の文字列は英数字でしたらなんでも問題ありません。
環境はmacです。
よろしくおねがいします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
yes 単体で改行なしは無理っぽいので、base64 にしてみました。手元の環境では5秒くらいでした。もし --wrap を受け付けないなら coreutils の base64 など入れてみてください。
yes a | base64 --wrap=0 | head -c 2147483647 > out
投稿2021/03/31 07:20
総合スコア2022
0
printf %2147483647s y > temp.txt
シンプルです。
投稿2021/04/05 23:25
総合スコア12
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私の環境では2147483647回のループでシェルスクリプトを実行しようとするとメモリアロケーションエラーが出てクラッシュしてしまったので、1000000に減らして実行し、さらにperlとawkで同じことをやってみました。
↓思い切りヤラカシていたので修正しました。結論は変わりません。
$ time ( for i in {0..1000000}; do echo -n a ; done;) >/dev/null real 0m5.205s user 0m4.810s sys 0m0.390s $ time awk 'BEGIN{for(i=0;i<=100000;i++){printf "a",i}}' >/dev/null real 0m0.025s user 0m0.023s sys 0m0.002s $ time perl -e 'for(0..1000000){print "a"} ' >/dev/null real 0m0.080s user 0m0.078s sys 0m0.003s
どうやらawkが良さそうです。
投稿2021/03/31 08:50
編集2021/03/31 10:58総合スコア13692
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/31 09:03
2021/03/31 09:06
2021/03/31 11:00
2021/03/31 11:27
2021/03/31 11:52
2021/03/31 11:59
0
ちょっと良いものがみつからなかったのですが参考に以下をあげておきます。
https://unix.stackexchange.com/a/269184
https://unix.stackexchange.com/a/101334
※yesが良さそうですが改行は不要ですよね
投稿2021/03/31 06:06
総合スコア1376
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。