Bagaimana cara membuat file dari terminal berulang satu set kata tanpa batas? Saya membutuhkannya untuk membuat file besar untuk keperluan parsing seperti ukuran 2-4GB. Saat ini saya menyalin garis tempel secara manual ke file yang sama untuk menambah ukuran.
command-line
Nisheet
sumber
sumber
mkfifo huge.tmp; while true; do yes "a dummy line" > huge.tmp; done
?Jawaban:
Ada cara mudah untuk mengulangi satu baris berkali-kali:
akan menghasilkan out.txt yang berisi 10.000 baris semua mengatakan "kami tidak punya pisang".
Untuk membatasi output untuk jumlah yang tepat byte, penggunaan
head
's-c
pilihan bukan-n
. Misalnya, ini menghasilkan tepat 10 kB teks:sumber
head -c 10000
untuk 10 kB, bukanhead -n 10000
untuk 10k baris.Saya tidak bisa merekomendasikan tanpa batas mengulangi teks, tapi Anda bisa membuat file ~ 2GB teks berulang-ulang dengan python seperti begitu ...
Itu akan mencetak "halo dunia" 10 kali dan membuat baris baru, dan ulangi itu 20.000.000 kali, menulis hasilnya ke file
bigfile
. Jika semua karakter Anda adalah ASCII, maka masing-masing adalah satu byte, jadi hitung dengan tepat tergantung pada apa yang ingin Anda tulis ...CPU Anda mungkin dimiliki. Saya kehabisan RAM jika saya mencoba melakukan lebih dari 10.000.000 baris ...
Saya menjalankan pemanggang roti
sumber
Perl memiliki
x
operator yang hebat:Jadi, sebagai solusi sederhana, Anda bisa menulis baris Anda beberapa juta kali. Misalnya, perintah ini membuat file 3G:
Jika Anda perlu menentukan ukuran pasti (2 GiB dalam hal ini), Anda dapat melakukan:
sumber
Masukkan set kata yang akan diulang dalam file misalnya
source.txt
. Dapatkan ukuransource.txt
, dalam byte misalnya dengan:Tentukan ukuran file tujuan misalnya
destination.txt
, 2 GB atau 4 GB atau apa pun. Konversi ukuran dalam byte.Membagi ukuran file tujuan dengan ukuran file sumber.
bash
tidak dapat melakukan aritmatika floating point, tetapi tidak diperlukan dalam kasus ini.Gunakan
for
konstruksi untuk mengulangcat source.txt
operasi kali hasil divisi. Ini akan menjadi perkiraan terdekat dari ukuran file tujuan yang bisa Anda peroleh dengan pengulangan. Output dari operasi disimpan dalamdestination.txt
.Misalnya, dengan asumsi
source.txt
30 byte, dan kami ingin membuat file 2 GB, kami perlu:Di sini saya menetapkan batas atas oleh
((16777216/30))
pada saat inisialisasi; Anda bisa mendapatkan hasilnya dan menaruhnya di sini juga.Operasi akan memakan waktu; semakin besar
source.txt
, semakin sedikit waktu yang dibutuhkan.sumber
destination.txt
sekali untuk setiap iterasi dari loop?Anda juga bisa menggunakan
while
-loop.Contoh: Konten
foo.txt
(Ini adalah sumber Anda):bar.txt
kosong (Ini adalah file target Anda). Anda sekarang dapat menemukan loop berikut untuk menulis kontenfoo.txt
beberapa kali menjadibar.txt
:Penjelasan:
stat --format "%s" bar.txt
menampilkan ukuranbar.txt
dalam byte.while [ $(stat --format "%s" bar.txt) -lt 150 ]
tindakan berikut akan diulangi sampai ukuran target (dalam hal ini 150 byte) tercapai.cat foo.txt >> bar.txt
tambahkan kontenfoo.txt
kebar.txt
sumber
pertama-tama jalankan perintah:
akan membuat file di jalur ukuran bs * menghitung byte acak, dalam kasus kami 2048 * 10 = 20Kb. yang dapat diubah sesuai kebutuhan.
Perintah ini mengalihkan STDIN ke file, jadi Anda harus memasukkan dua baris dan kemudian tekan Ctrl + D. Maka Anda perlu menjalankan perintah berikut:
Di mana n adalah bilangan bulat. Ini akan membuat file dengan 2 ^ (n +1) baris di dalamnya, dengan menduplikasi dua baris asli Anda. Jadi untuk membuat file dengan 16 baris yang akan Anda lakukan:
Berikut ini beberapa angka untuk Anda mulai:
sumber
FIFO mungkin adalah yang Anda cari. Alih-alih memanggil program Anda dengan file yang diberikan, Anda dapat mengikat hasil dari perintah shell untuk itu melalui proses subtitusi dan program akan melihat hasilnya sebagai file plaintext. Keuntungannya di sini adalah bahwa Anda tidak lagi dibatasi oleh ruang disk Anda, sehingga Anda dapat mencapai ukuran file yang tidak mungkin sebaliknya, asalkan program Anda tidak perlu buffer seluruh file terlebih dahulu dan hanya dapat menguraikannya baris demi baris. Misalnya, menggunakan balasan @hobbs untuk menghasilkan konten:
Ini meminjamkan saya file 95 gigabytes (menurut wc) tanpa biaya dalam ruang HDD dan hampir tidak ada RAM, hanya cukup untuk buffer apa perintah kembali sebelum dibaca. Ini hampir mendekati "tanpa batas" seperti yang akan Anda dapatkan.
sumber