Ho un file che continua un po 'di no delle righe. Voglio dividere il file in n no.of con nomi particolari. Non importa quante linee presenti in ogni file. Voglio solo alcuni file no.of (diciamo 5). qui il problema è il no delle righe nel file originale continua a cambiare. Quindi ho bisogno di calcolare no di linee, quindi basta dividere i file in 5 parti. Se possibile, dobbiamo inviare ciascuno di loro in diverse directory.Come dividere un file in n nessuna delle parti
risposta
In Linux, c'è un split
comando, pezzi
split --lines=1m /path/to/large/file /path/to/output/file/prefix
uscita dimensione fissa di INPUT PREFIXaa, PREFIXab, ...; la dimensione predefinita è 1000 righe e PREFIX predefinito è 'x'. Senza INPUT o quando INPUT è -, leggi l'input standard.
...
-l, --lines = NUMERO linee put Numero per file di output
...
Si dovrà calcolare la dimensione reale delle spaccature in anticipo, però.
Questo si divide su linee o byte? –
qui la dimensione del file cambia anche giornalmente .. Quindi ho bisogno di una risposta generale in cui non dovremmo usare né la dimensione né il no. Delle righe –
Devo scrivere uno script di shell per questo. Qualcuno può aiutarmi con esso –
Supponendo che si sta elaborando un file di testo poi wc -l
per determinare il numero totale di linee e split -l
per dividere in un numero specificato di righe (totale/5 nel tuo caso). Funziona su UNIX/Mac e Windows (se hai cygwin installato)
Posso pensare ad alcuni modi per farlo. Quale useresti dipende molto dai dati.
Le linee sono a lunghezza fissa: Trovare la dimensione del file con la lettura è voce di directory e dividere per la lunghezza della linea per ottenere il numero di linee. Usalo per determinare quante linee per file.
I file devono avere solo lo stesso numero di righe. Leggere nuovamente la dimensione del file dalla voce della directory. Leggere le prime N righe (N dovrebbe essere piccola ma una parte ragionevole del file) per calcolare una lunghezza della linea media. Calcola il numero approssimativo di righe in base alla dimensione del file e alla lunghezza della linea media prevista. Ciò presuppone che la lunghezza della linea segua una distribuzione normale. In caso contrario, regolare il metodo in modo casuale per campionare le linee (usando seek() o qualcosa di simile). Riavvolgi il file dopo aver ottenuto la media, quindi suddividilo in base alla lunghezza della linea prevista.
Leggere il file due volte. La prima volta conta il numero di linee. La seconda volta che divide il file nei pezzi necessari.
EDIT: utilizzando uno script di shell (secondo i vostri commenti), la versione randomizzato di # 2 sarebbe difficile a meno che non hai scritto un piccolo programma di farlo per voi. Dovresti essere in grado di utilizzare ls -l
per ottenere le dimensioni del file, wc -l
per contare il numero esatto di righe e head -nNNN | wc -c
per calcolare la lunghezza media della linea.
In bash, è possibile utilizzare il comando split
per dividerlo in base al numero di righe desiderato. È possibile utilizzare il comando wc
per capire quante linee sono desiderate. Ecco wc
combinato con con split
in una riga.
Ad esempio, per dividere onepiece.log
in 5 parti
split -l$((`wc -l < onepiece.log`/5)) onepiece.log onepiece.split.log -da 4
Questo creerà i file come onepiece.split.log0000
...
Nota: divisione bash arrotonda verso il basso, quindi se c'è un resto non ci sarà essere un sesto file di parti.
** split -da 4 -l $ (('wc -l
eccellente miglioramento, @grasshopper – Flowpoke
questa risposta è più concisa rispetto alle due [domande con maggiore upvoted] (http://stackoverflow.com/questions/7764755/unix-how-to-split- a-file-in-equal-parts-without-breaking-individual-lines) su stackoverflow e askubuntu. –
- 1. Dividere un numero in parti disuguali casuali
- 2. Come dividere una matrice in parti uguali?
- 3. come dividere un modale Twitter bootstrap in 2 parti
- 4. Come dividere un NSArray in due parti uguali?
- 5. Come dividere lo schermo in tre parti in verticale?
- 6. Come posso dividere un file mp3 in più parti riproducibili individualmente?
- 7. dividere un indice di esagono in n pezzi
- 8. suddividere un file in più parti conftest.py conftest-come piccoli
- 9. Android - Come dividere una vista in 4 parti uguali?
- 10. Come dividere un file .gif in frame?
- 11. Come dividere un file enorme in parole?
- 12. Come dividere la riga di bootstrap in 5 parti uguali?
- 13. Come dividere stringa in 2 parti, dopo certa posizione
- 14. C#: divisione di una matrice in n parti
- 15. Come dividere un file XML in modo semplice in Python?
- 16. Come dividere video o audio con parti silenziose
- 17. Come dividere un file mp3 in file più piccoli?
- 18. React Native: Come dividere un file in più file
- 19. Come dividere (un chunk) un array di Ruby in parti di elementi X?
- 20. Come dividere un file usando un suffisso numerico
- 21. Come dividere un file di testo in parole?
- 22. Dividere o salvare un sottoinsieme di un file Shape SHP ESRI in un nuovo file?
- 23. Come dividere un numero in Clojure?
- 24. Come refactoring un metodo @Transactional per dividere le parti non transazionali
- 25. dividere un csv in più file in python
- 26. Come dividere un array in un gruppo di n elementi ciascuno?
- 27. Come dividere il file su un numero di linea
- 28. Come avere diverse parti del file di configurazione in C#
- 29. Come dividere routes.rb in file più piccoli
- 30. Dividere una lista in elenchi più piccoli di dimensione N
Utilizzare cosa? Uno strumento, un linguaggio di programmazione, uno script ...? –
Windows, Linux? Che lingua/e hai/i a disposizione? –
Devo farlo in UNIX –