Çoklu gigabayt metin dosyaları nasıl düzenlenir? Vim çalışmıyor = ([kapalı]


112

Birden çok gigabaytlık metin dosyalarını, belki de belleğe aynı anda yalnızca küçük bölümleri yükleyerek düzenleyebilen düzenleyiciler var mı? Vim başa çıkabilecek gibi görünmüyor = (


Gerçekten büyük veri toplama dosyalarını vim'e yükledim ve bunları sorunsuz bir şekilde ele aldım.
Kale

Düzenleme ihtiyaçlarınıza bağlı olarak, bir arama yapmak ve değiştirmek için onu sed veya perl gibi bir şeyden geçirebilirsiniz.
El Yobo

23
Aslında konu dışı değildir, birçok programcı vim'i bazen UI düzenleyicisinin tamamlayıcısı olarak kullanır. Konu sorusu gerçek sorunla ilgili. Hepimiz bu tür bir görev için bu kadar iyi iki İsviçre ordusu aletini biliyoruz, bu yüzden lütfen vim'i çok egzotik veya saha dışında olarak görmeyin. SO insanlar içindir.
Sławomir Lenart

Kapatmak yerine, neden SuperUser veya Linux / Unix veya VIM'e taşımayasınız?
user1271772

Yanıtlar:


72

Eğer * nix üzerinde (ve nadiren) sadece dosyanın parçalarını (ve değiştirmek zorunda varsayarak) varsa, (kullanarak dosyaları bölmek olabilir split, tek tek düzenlemek onları (kullanarak komutu) awk, sedya da benzer bir şey) ve sonra bunları bağlamak yapılır.

cat file2 file3 >> file1

10
Harika bir ipucu. 13GB (152.000.000 satır) bir sql dosyam vardı ve sadece "split -l 1000000" kullanıp vim ile istediğim yerde bir milyon satır dosyasını düzenlemek harika çalıştı. Onları ayırmak 10 dakika sürdü. (Orijinal dosyayı vim ile açmaya çalıştım ve işe yaradı, ancak kullanılamayacak kadar yavaştı.)
Claes Mogren

149

Ctrl-C dosya yüklemeyi durdurur. Dosya yeterince küçükse, tüm içeriği yüklediğiniz ve herhangi bir yükleme sonrası adımını sonlandırdığınız için şanslı olabilirsiniz. Bu ipucunu kullanırken tüm dosyanın yüklendiğini doğrulayın.

Vim büyük dosyaları oldukça iyi idare edebilir. Az önce 3,4 GB'lık bir dosyayı düzenledim, satırları sildim vb. Unutulmaması gereken üç şey:

  1. Ctrl-C'ye basın: Vim başlangıçta tüm dosyayı okumaya çalışır, sözdizimi vurgulama ve dosyadaki satır sayısı gibi şeyler yapar. Ctrl-C bu numaralandırmayı (ve sözdizimi vurgulamayı) iptal eder ve yalnızca ekranınızda görüntülenmesi gerekiyor.
  2. Salt okunur: Vim, dosya bir. düzenlemeleri gerçekleştirmek için dosya kopyalayın. W zorunda kaldım! dosyayı kaydetmek için ve işte o zaman en çok zaman aldı.
  3. :115355Satıra git: Yazmak sizi doğrudan 115355 numaralı satıra götürecektir; bu, bu büyük dosyalarda çok daha hızlıdır. Vim, her satır ara belleğini yüklediğinde taramaya baştan başlıyor gibi görünüyor ve dosyanın sonuna doğru taramak için Ctrl-F tuşlarını basılı tutmak, gerçekten yavaşlıyor gibi görünüyor.

Not - Ctrl-C tuşlarına bastığınız için Vim örneğiniz salt okunur durumdaysa, Vim tüm dosyayı arabelleğe yüklememiş olabilir. Böyle bir durumda, dosyayı kaydetmek, dosyanın tamamını değil, yalnızca arabelleğindekini kaydeder . GDosyanızdaki tüm satırların orada olduğundan emin olmak için hızlı bir şekilde sonuna atlamak için kontrol edebilirsiniz.


14
Bu tavsiyeyi kullanarak 44 gigabayt wikipedia xml dökümü ile vim içinde başa çıkabildim. (Ctrl-c) dönüştürüldü.
vancan1ty

1
Windows'ta 2.5GB günlük dosyasının sonunu okumaya çalıştım. Gvim'de açılış, ayrılan 2 GB belleği aştığında yetersiz bellek hatasıyla sonuçlandı. Ctrl-c hilesini denerken, dosyayı belleğe yüklemeyi durdurdu, ancak dosyanın yalnızca gvim'in yükleyebildiği kısmını görmesine izin verdi. Bu yüzden ctrl-c'ye basmadan önce ne kadar uzun süre bekledim, dosyanın daha fazlasını görebildim. Dosyanın sonuna gitmek veya dosyanın geri kalanını yüklemek imkansızdı (veya nasıl yapılacağını bilmiyordum). Vim'in göreve hazır olmaması biraz hayal kırıklığı yarattı: (Sonunda dosyayı
100MB'lık

14
Benim için çalışmıyor. 3GB'lık bir dosya yükledim, ctrl-c tuşlarına bastım ve ardından içerik beliriyor. Kaydırma vb. Düzenlemeleri yapabilirim ancak yüklenen kısmın sonuna geldiğimde (% 5 diyelim) artık yüklenmeyecek (başlangıçta ctrl-c'ye bastığım noktaya kadar yüklenen dosya kısmına takılı kaldım)
Patryk

1
Onaylandı, user3338098. Ctrl-C tuşlarına basarsanız ve tüm dosyayı yüklemezse (diğerlerinin de bahsettiği gibi), onu kaydetmek yalnızca yüklediğiniz şeyi kaydeder. Muhtemelen bu yüzden ilk başta salt okunur hale geliyor. Bunu not etmek için Salt Okunur noktamı güncelleyeceğim.
Aaron R.

16
Bu talimatlara uymak, yeni indirdiğim büyük bir dosyayı imha etmeme neden oldu. Temel olarak, yazının sonuna kadar bahsetmediğiniz veri kaybına neden olan talimatlar verdiği için 2. noktayı tamamen kaldırmanız gerekir.
Neobyte

75

Tıkanmasına neden olan eklentiler olabilir. (sözdizimi vurgulama, kıvrımlar vb.)

Eklenti olmadan vim çalıştırabilirsiniz.

vim -u "NONE" hugefile.log

Minimalist ama size en azından alıştığınız vi hareketlerini verecektir.

syntax off

başka bir bariz olanıdır. Kurulumunuzu azaltın ve ihtiyacınız olanı sağlayın. Neler yapabileceğini ve bir görevi başka yollarla gerçekleştirmeniz gerekip gerekmediğini öğreneceksiniz.


3
Bu hala tüm dosyayı RAM'e
yüklüyor

@Totor evet, önce dosyayı bölerdim ama bu ayar, rastgele otomatik komutları kapatarak size en iyi vim performansını hızlı bir şekilde verecektir. Benim amacım buydu. Yeterli belleğe sahip iş istasyonları, bir konsere yaklaşan dosyaları işleyebilmelidir.
michael

2
dosya sanal belleğin boyutunun 10 katı olduğunda vim / vi işe yaramaz mı?
user3338098

1
Bu komutu 250MB'lık bir dosyayı 2 saniyenin altında açmak için kullandım. Amazing
user674669

20

Bölünmüş + vim çözümüyle @Al pachio tarafından verilen yanıtta küçük bir gelişme, dosyaları bir glob ile okuyabilir, dosya yığınlarını etkili bir şekilde tampon olarak kullanabilirsiniz.

$ split -l 5000 myBigFile
xaa
xab
xac
...

$ vim xa*
#edit the files

:nw  #skip forward and write
:n!  #skip forward and don't save 

:Nw  #skip back and write
:N!  #skip back and don't save


8

Bunu, bir SQL dökümünde küçük bir değişiklik yapmam gerektiğinde, çoğunlukla 1 GB civarındaki dosyalarla yapmaya çalıştım. Windows kullanıyorum, bu da onu büyük bir acı haline getiriyor. Cidden zor.

Açıkça sorulan soru "neden buna ihtiyacın var?" Bunu bir kereden fazla denemek zorunda olduğunuz deneyimden size söyleyebilirim, muhtemelen gerçekten başka bir yol bulmaya çalışmak istersiniz.

Peki bunu nasıl yapacaksınız? Bunu yapmamın birkaç yolu var. Bazen dosyayı açmak için vim veya nano alabilirim ve bunları kullanabilirim. Bu gerçekten zor bir acı, ama işe yarıyor.

Bu işe yaramadığında (sizin durumunuzda olduğu gibi) yalnızca birkaç seçeneğiniz vardır. İhtiyacınız olan değişiklikleri yapmak için küçük bir program yazabilirsiniz (örneğin, ara ve değiştirir). Bunu yapabilecek bir komut satırı programı kullanabilirsiniz (belki sed / awk / grep / vb. İle yapılabilir?)

Bunlar işe yaramazsa, dosyayı her zaman parçalara bölebilirsiniz ( bölme gibi bir şey bariz bir seçimdir, ancak istediğiniz parçayı elde etmek için baş / kuyruk kullanabilirsiniz) ve ardından ihtiyaç duyan parçaları düzenleyebilirsiniz. ve daha sonra yeniden birleştirin.

Yine de güven bana, başka bir yol bulmaya çalış.


3
Bu gibi durumlarda genellikle sed arkadaşınızdır. Editörünüz, bir dosyanın tepesine birkaç karakter eklemek ve diğer her şeyi nasıl aşağıya iteceğini bulmaktan gerçekten hoşlanmıyor.
dkretz

@le dorfier: Evet. Arama / değiştirme yapmam gerektiğinde sed kullandım. Böyle bir dosyadan birkaç satırı silmem gerektiğinde ( delicesine uzun birkaç satır) bunu vim'de yapmayı başardım, ancak tahmin edebileceğiniz gibi satırlar arasında hareket etmek (aynı zamanda gerçek silme) oldukça zaman aldı (yanıt vermek ve yeniden çizmek için saniye +.) Bu satırlardan birine birkaç harf bile eklemeyi denemek istemem.
MBCook

Tam olarak aynı sorun .... büyük bir tablo için bir SQL komut dosyasının üst kısmındaki "using" ifadesi veya hedef sistemde mevcut olmayan bir dosya grubu. Onları bozmak için Free File Splitter'ı, yeniden katılmak için aşağıdaki komut satırını kullanıyorum.
EBarr

6

Onaltılık editörlerin büyük dosyaları işlemesinin oldukça yaygın olduğunu düşünüyorum. Windows'ta, 8 EB'ye (8 milyar gigabayt) kadar dosyaları işlediğini iddia eden HxD kullanıyorum .


14
Bunu nasıl test ettiklerini merak ediyorum ...: P
Shadow

Linux'ta tavsiye ederimhexedit
uygun

4

Charles Campbell'ın LargeFile eklentisiyle Win7 x64 üzerinde vim 7.3.3'ü çoklu gigabaytlık düz metin dosyalarını işlemek için kullanıyorum. Gerçekten iyi çalışıyor.

Umarım doğru gelirsin.


Eklentiyi nasıl devre dışı bırakabilirsiniz? Örneğin, Vim'de bir dosya açıldığında yeniden çalışmak için vurgulamak gibi diğer tüm uzantıları almak?
hhh

3

Vay canına, bir veya iki GB ile bile vim'i asla boğmayı başaramadı. UltraEdit (Windows'ta) ve BBEdit'in (Mac'lerde) daha büyük dosyalar için daha da uygun olduğunu duydum, ancak kişisel deneyimim yok.




2

Süper büyük günlük dosyaları için FAR Commander'in yerleşik düzenleyicisini / görüntüleyicisini kullandım.


1

Kendimi kullanılmış olması TextPad bir üst sınır yoktur büyük günlük dosyaları için.


1

Bunun gibi bir şey için kullanabildiğim tek şey, en sevdiğim Mac hex editörü 0XED. Ancak, onlarca megabaytta büyük olduğunu düşündüğüm dosyalardaydı. Ne kadar ileri gideceğinden emin değilim. Yine de dosyanın yalnızca bazı bölümlerini belleğe yüklediğinden eminim.


0

Geçmişte, dosyalar çok büyüdüğünde bir bölme / düzenleme / birleştirme yaklaşımını başarıyla kullandım. Bunun işe yaraması için, düzenlenecek metnin orijinal dosyada nerede olduğunu bilmeniz 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.