Maneira rápida de excluir uma linha de um arquivo extremamente grande [duplicado]

1

Eu tenho um arquivo .csv de 67 GB (eu sei ... eu sei ...)

Eu preciso remover a linha 4,125,878 do arquivo como está corrompido. As ferramentas de análise do meu CSV não irão ignorar ou ignorá-lo.

Eu poderia usar sed para fazer algo como

sed '4125878d' in.csv > out.csv

Mas isso seria uma operação extremamente dispendiosa em termos de tempo e espaço em disco.

Se eu usar sed -i '4125878d' in.csv , a operação levará tempo.

Existe uma maneira de remover rapidamente uma linha do meio de um arquivo enorme?

    
por Terence Eden 02.10.2015 / 15:14

2 respostas

2

Eu não acredito.

Mesmo que sed ou qualquer programa que você use para isso seja inteligente o suficiente para fazer a mudança no lugar e não com um arquivo temporário, ele ainda terá que reescrever todos os dados após o início da linha que você deseja excluir. / p>

Excluir uma linha significa que você está deslocando para a esquerda todo o conteúdo do arquivo do ponto em diante até o final da linha anterior. Não importa o que, você ainda terá que reescrever o arquivo a partir desse ponto.

    
por 02.10.2015 / 15:19
1

Faça isso on-the-fly:

csv-parser -f <(cat my-huge.csv | sed '4125878d')
    
por 02.10.2015 / 15:59