Crackstation'ın Wordlistesini bir veritabanı tablosuna ekleme


1

Crackstation'ın 1.5 milyar kelime listesini (15 gig) bir veritabanı tablosuna eklemeye çalışıyorum . SQLite ve Postgres'ı komut satırından bugüne kadar şanssız olarak denedim.

Her ikisi de, verilerin dosyaya dağılmış bazı ikili veri değerlerini içerdiğini görünce üzülür. Veri sadece UTF-8 karakter gibi gözükmüyor .

UltraEdit UTF-8 olarak algılar.
Ancak, linux dosya komutu diyor ki:

$  file crackstation.txt -I
crackstation.txt: application/octet-stream; charset=binary

Bu verileri Postgres veya SQLite'a nasıl aktarabilirim ki böylece analiz edebilir / sorgulayabilirim?

Veriyi ilk önce temizleyebilmem / dönüştürebilmemin bir yolu var mı, ek çalışsın mı ... yoksa farklı bir şekilde veri tabanına aktarımı yapıp çalışsın mı?

İşte denedim:

SQLite:

sqlite> .mode csv
sqlite> .separator "\n"
sqlite> .import crackstation.txt passwords

Buna verilen cevap milyonlarca unescaped " charactermesajdır ve tabloya sadece 1 satır eklenmiştir (bu sadece boş bir dize değeridir).

postgres:

psql> COPY passwords FROM 'crackstation.txt' WITH (FORMAT TEXT, NULL '', ENCODING 'UTF-8');

Buna verilen cevap, ERROR: invalid byte sequence for encoding "UTF8": 0xf6 blah blahüzerinde bulunduğu satır numarasıdır. Sorun şu ki, txt dosyası 15 gig'dir, bu yüzden yalnızca UltraEdit'te açabildim ve hatta bu hatta bu çizgiye ulaşmak, silmek, psql komutunu tekrar çalıştırmak, durulamak ve tekrarlamak için acı verici bir şekilde yavaş Şimdi soruyu soruyorum.

Yanıtlar:


0

Bu dosya için herhangi bir kodlama belirtilmemişse, dosyayı bu şekilde almak isteyebilirsiniz.

Hedef özel bir veritabanıysa, PostgreSQL durumunda, herhangi bir kodlamayı zorlamadan oluşturabilirsiniz.

SQL komutu olarak:

CREATE DATABASE dbname
  encoding 'SQL_ASCII'
  lc_collate= 'C'
  lc_ctype='C'
  template=template0;

Bu veritabanında oluşturulan tablolar, herhangi bir kodlamada karakterlere karşılık gelip gelmediğini kontrol etmeden sıfır olmayan baytları kabul eder. Dize karşılaştırmaları baytlı olarak yapılacaktır.

Dosya nul bayt da içeriyorsa, bunları tr -d '\0'işletim sisteminize eşdeğer bir komutla filtreleyerek silmeniz gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.