Modifica la prima riga del file di testo di grandi dimensioni


16

Ho un enorme file di testo, troppo grande per poter essere impaginato nella memoria. Tutto quello che devo fare con questo file di testo è modificare la prima riga (è un file CSV e devo modificare i titoli).

C'è un modo semplice per farlo in bash?


C'è qualche motivo per cui non puoi semplicemente usare un editor di testo?
dangph

Il file è troppo grande, è oltre 20 volte più grande della mia memoria virtuale massima su questa macchina.
Lynks,

1
giusto. Avevo l'impressione che i bravi editor di testo potessero gestire file molto grandi perché caricano solo quanto hanno bisogno in memoria, ma dopo aver letto alcune delle altre domande sembra che la maggior parte di loro abbia dei problemi.
dangph

@dangph True ... potrebbe essere strano ma alcuni "vecchi editor di testo" obsoleti e obsoleti (o così chiamati) come edlinper ms-dos o edper Unix non sembravano avere questo problema ma dove solo gli editor di riga ... RAM su questi tempi erano una cosa scarsa e preziosa e una dimensione del file in Gigabyte era qualcosa di impossibile da credere! ;)
laurent

Per chiarire le cose;): NON mi manca ed!!! ma sarebbe una buona scelta in questo caso (non sono sicuro che possa gestire un file di queste dimensioni ...)
laurent

Risposte:


22

È possibile utilizzare lessper vedere ciò che si desidera modificare e utilizzare sedper apportare le modifiche. In questo modo si modifica senza caricare l'intero file.

Un altro modo è quello di dividere il file, modificarlo e ricollegarlo:

split -b 10000k <file>

and to join:

cat xa* > <file>

voto per sed.
atroon

Fantastico, dividere e partecipare era esattamente quello che stavo cercando, grazie.
Lynks,

certo, sed è meglio in quanto può cercare / sostituire facilmente l'intero file ma se ha solo bisogno di cambiare la prima riga, la divisione non è male e anche più veloce.
laurent,

4
sed avrebbe impiegato ore a scorrere l'intero file (che è poco meno di mezzo TB), i cambiamenti erano solo sulla prima riga, dividerlo sembra ragionevole.
Lynks,

3

Se la modifica modifica la lunghezza della riga, è necessario riscrivere l'intero file, vedere ad esempio questa discussione su SO. Probabilmente dovresti considerare di salvare i dati in un database.

Tenendo presente questo, è possibile eseguire lo streaming di modificare il file con sed. Per sostituire la prima riga, fai qualcosa del genere (GNU sed):

< oldfile sed '1c\new_heading' > newfile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.