Resposta simples: linhas duplicadas consecutivas
Para edição no local, sed
é a ferramenta de escolha. Para remover linhas duplicadas consecutivas, use isto:
sed '$!N; /^\(.*\)\n$/!P; D'
Não é tão simples: linhas duplicadas não consecutivas
Se as linhas duplicadas não são consecutivas, você pode usar isso - mas há um risco de excesso de espaço no buffer:
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n/d; s/\n//; h; P'
Como sort
usa o algoritmo Merge Sort (assumindo o GNU sort
normalmente usado no Linux), o risco de ficar sem memória ou disco permanece, porque o Merge Sort pode usar muito espaço auxiliar no pior caso. situações. Além desse risco, @thom está correto sugerindo sort -u
.
Se o problema for remover linhas duplicadas não consecutivas, e houver o risco de que sed
ou um sort
no local possam ficar sem espaço devido à pior das hipóteses, a melhor solução é provavelmente mova o arquivo para algum tipo de armazenamento externo, como uma unidade flash USB.
Observe que, se você não souber se o sed
ou sort
pode ficar sem espaço e corromper o arquivo, você realmente deseja fazer o backup do arquivo, de uma forma ou de outra. Outra solução pode ser classificar o sistema de arquivos para arquivos grandes que podem ser compactados e compactar o suficiente para executar o awk '!x[$0]++' inFile > outFile
ou sort -u
com segurança, em um arquivo separado. Então você não perderá dados se o comando falhar.
Veja também "Scripts úteis de uma linha para sed
": link