Ho tentato di aprire un file enorme (~ 2 GB) in VIM ma si è bloccato. In realtà non ho bisogno di modificare il file, basta saltare in giro in modo efficiente.Utilizzo di file enormi in VIM
Come posso lavorare con file di grandi dimensioni in VIM?
Ho tentato di aprire un file enorme (~ 2 GB) in VIM ma si è bloccato. In realtà non ho bisogno di modificare il file, basta saltare in giro in modo efficiente.Utilizzo di file enormi in VIM
Come posso lavorare con file di grandi dimensioni in VIM?
emacs funziona molto bene con i file nei 100 di megabyte, l'ho usato su file di log senza troppi problemi.
Ma generalmente quando ho qualche tipo di compito di analisi, trovo che scrivere uno script perl sia una scelta migliore.
Dal momento che non c'è bisogno di modificare effettivamente il file:
vim con "-R" continua a soffocare. Meno è una buona idea. – hoju
Per "strozzature" intendi un po 'di tempo per aprire? O in realtà si blocca? Ci vuole un po 'più di 4 minuti sul mio non-così recente box Linux per aprire file da 2.7 GB in 'view' (solo provato e sincronizzato). Certo, non è esattamente istantaneo, ma funziona. – ChssPly76
Sì, bancarelle. Sono sicuro che se avessi aspettato si sarebbe aperto alla fine. Sono andato con meno perché si apre immediatamente e sono abituato alla navigazione. – hoju
Questa è stata una domanda ricorrente per molti anni. (I numeri continuano a cambiare, ma il concetto è lo stesso: come faccio a visualizzare o modificare i file che sono più grandi di memoria)
Ovviamente more
o less
sono buoni approcci per la lettura solo i file --- less
offre anche vi
come i tasti per lo scorrimento e la ricerca.
A Freshmeat la ricerca su "file di grandi dimensioni" suggerisce che due editori sarebbero particolarmente adatti alle proprie esigenze.
Uno sarebbe: lfhex ... un editor di file esadecimale di grandi dimensioni (che dipende da Qt). Quello, ovviamente, comporta l'utilizzo di una GUI.
Un altro sembra essere adatto all'uso della console: hed ... e afferma di avere un'interfaccia simile a vim
(compresa una modalità ex
?).
Sono sicuro di aver visto altri editor per Linux/UNIX che erano in grado di sfogliare i file senza caricarli interamente nella memoria. Tuttavia, non ricordo nessuno dei loro nomi. Sto facendo questa risposta una voce "wiki" per incoraggiare gli altri ad aggiungere i loro link a tali editori. (Sì, ho familiarità con i modi per aggirare il problema utilizzando split
e cat
, ma sto pensando agli editor, in particolare gli editor di console/curses che possono fare a meno di questo e risparmiarci il tempo/le latenze e lo spazio sul disco che tali approcci comportare).
meno lavorato ottimo –
Ho un file da 12 GB da modificare oggi. Il plugin vim LargeFile non ha funzionato per me. Ha ancora esaurito tutta la mia memoria e poi ha stampato un messaggio di errore :-(Non ho potuto usare hexedit per nessuno, dato che non può inserire nulla, basta sovrascrivere. Ecco un approccio alternativo:
Hai diviso il file, modifica . le parti e poi ricombinare Puoi ancora bisogno il doppio dello spazio su disco se
Grep per qualcosa che circonda la linea che si desidera modificare:.
grep -n 'something' HUGEFILE | head -n 1
estratto che gamma di file. Dì che le linee che vuoi modificare sono alla riga 4 an d 5.Poi fare:
sed -n -e '4,5p' -e '5q' HUGEFILE > SMALLPART
-n
è necessario per sopprimere il comportamento predefinito di sed di stampare tutto4,5p
Stampa le linee 4 e 55q
interrompe sed dopo linea di lavorazione 5Modifica SMALLPART
utilizzando il tuo editor preferito.
Combinare file:
(head -n 3 HUGEFILE; cat SMALLPART; sed -e '1,5d' HUGEFILE) > HUGEFILE.new
HUGEFILE.new
sarà il file modificato, è possibile eliminare l'originale HUGEFILE
.
questo è vecchio ma, uso nano, vim o gvim
per default bobine vim – hoju
Questi strumenti non fanno nulla per risolvere il problema. –
nano riempie la memoria e muore su di me. –
E 'già tardi, ma se si desidera solo per navigare attraverso il file senza modificarlo, cat
può fare il lavoro troppo.
% cat filename | less
o in alternativa semplice:
% less filename
Si noti che 'cat'ting il file per primo è follemente stupido, in quanto significa che il file sarà completamente in memoria (quindi' less' può cercare il file) o non può essere cercato affatto; 'cat' fornisce solo un flusso di output statico. – Smar
Ho avuto lo stesso problema, ma era una discarica 300GB mysql e ho voluto sbarazzarsi del DROP
e cambiare CREATE TABLE
-CREATE TABLE IF NOT EXISTS
quindi non ha voluto per eseguire due invocazioni di sed
. Ho scritto questo breve script Ruby per ingannare il file con le modifiche:
#!/usr/bin/env ruby
matchers={
%q/^CREATE TABLE `foo`/ => %q/CREATE TABLE IF NOT EXISTS `foo`/,
%q/^DROP TABLE IF EXISTS `foo`;.*$/ => "-- DROP TABLE IF EXISTS `foo`;"
}
matchers.each_pair { |m,r|
STDERR.puts "%s: %s" % [ m, r ]
}
STDIN.each { |line|
#STDERR.puts "line=#{line}"
line.chomp!
unless matchers.length == 0
matchers.each_pair { |m,r|
re=/#{m}/
next if line[re].nil?
line.sub!(re,r)
STDERR.puts "Matched: #{m} -> #{r}"
matchers.delete(m)
break
}
end
puts line
}
Invocato come
./mreplace.rb <foo.sql> foo_two.sql
Giusto per notare per l'esecuzione, per eseguirlo come un exe richiede 'chmod + x mreplace.rb' prima, si potrebbe anche solo' ruby mreplace.rb ..' – Smar
Grazie @Steeve McCauley! Bel lavoro. Esattamente quello che stavo cercando quando cercavo la risposta a questa domanda. –
ho scritto un piccolo script in base alla risposta di Florian che utilizza nano (il mio editor preferito):
#!/bin/sh
if [ "$#" -ne 3 ]; then
echo "Usage: $0 hugeFilePath startLine endLine" >&2
exit 1
fi
sed -n -e $2','$3'p' -e $3'q' $1 > hfnano_temporary_file
nano hfnano_temporary_file
(head -n `expr $2 - 1` $1; cat hfnano_temporary_file; sed -e '1,'$3'd' $1) > hfnano_temporary_file2
cat hfnano_temporary_file2 > $1
rm hfnano_temporary_file hfnano_temporary_file2
usare in questo modo:
sh hfnano yourHugeFile 3 8
In questo esempio, nano aprirà le righe da 3 a 8, puoi modificarli e quando salvi e chiudi, quelle linee nell'enorme file verranno sovrascritte automaticamente con le tue linee salvate.
Vecchio thread. Ma comunque (gioco :)).
$less filename
meno funziona in modo efficiente se non si desidera modificare e basta guardarsi intorno, che è il caso per l'esame i file di log enormi.
Cerca in meno opere come vi
parte migliore, è disponibile di default sulla maggior parte delle distribuzioni. Quindi non sarà un problema anche per l'ambiente di produzione.
Per enormi battute (stampa caratteri da 1
a 99
):
cut -c 1-99 filename
Vim dovrebbe essere a posto fino a quando si ': impostare binary' prima ... – ephemient
Questo è un buon bersaglio per una nuova fuse il filesystem! ** splitfs ** o qualcosa del genere ... ci sto lavorando! – rodrigo
Troppo tardi ... questo esiste già: http://sourceforge.net/projects/joinsplitfs/ – rodrigo