Dividir arquivo de log grande SEM manter o original (dividir no local)

5

Eu tenho um arquivo de log de 226 GB, e eu quero split em pedaços para facilitar mais xz ing. O problema é que eu só tenho 177 GB de espaço no meu espaço viável.

Existe uma maneira de split um arquivo na metade ou em um número N de blocos sem manter uma cópia adicional do original?

    $ split myFile.txt
    $ ls -halF
-rw-r--r--   1 user group 35 Dec 29 13:17 myFile.txt
-rw-r--r--   1 user group 8 Dec 29 13:18 xaa
-rw-r--r--   1 user group 3 Dec 29 13:18 xab
-rw-r--r--   1 user group 5 Dec 29 13:18 xac
-rw-r--r--   1 user group 10 Dec 29 13:18 xad
-rw-r--r--   1 user group 8 Dec 29 13:18 xae
-rw-r--r--   1 user group 1 Dec 29 13:18 xaf

Eu preferiria apenas não ter meu arquivo myFile.txt, e ter apenas os arquivos divididos. Eu ficaria feliz em ficar com o comportamento padrão e excluir o original, mas eu simplesmente não tenho o espaço disponível para trabalhar nisso.

Não sou especialista em sed ou awk , mas achei que haveria uma maneira de "remover outro arquivo" de comportamento que poderia ser alcançado com um deles?

    
por Ceafin 29.12.2014 / 20:42

2 respostas

2

O que pode funcionar é transmitir partes dele diretamente para xz - eu acho que você pode compactar um arquivo de log suficientemente bom para caber tanto o original quanto as partes compactadas no espaço restante.

  1. Obtenha o número de linhas:

    wc -l myFile.txt
    
  2. Divida isso em quantas partes desejar, por exemplo 10k linhas por peça.
  3. Use sed para enviar a parte desejada para xz :

    sed -n '1,10000p' myFile.txt | xz > outfile01.xz 
    sed -n '10001,20000p' myFile.txt | xz > outfile02.xz
    

Isso pode ser feito por um script, é claro.

Mas honestamente, faça como a EEAA disse ...

    
por 29.12.2014 / 21:42
1

Você pode fazer encarnações sucessivas de cauda e truncar para cortar pedaços do final do arquivo enorme.

Algo como

tail -n 10000 myFile.txt > myFile.001.txt
truncate -s -$(wc -c myFile.001.txt) myFile.txt
xz myFile.001.txt
rm myFile.001.txt

Você também pode roteirizar isso. Provavelmente vai demorar um pouco para ser executado, e seria muito melhor lidar com isso fora da caixa.

    
por 29.12.2014 / 21:57

Tags