Gerenciando linhas duplicadas nos arquivos [closed]

0

Estou gerando todas as linhas comuns / duplicadas entre 5 arquivos, todos dentro do mesmo diretório

sort *.txt | uniq -d > output.txt

Eu preciso que output.txt seja mesclado com o arquivo1.txt (então, qualquer coisa que não seja uma duplicata é adicionada), mas em outros lugares, no arquivo2.txt, se a linha duplicada aparecer, ele precisa ser removido.

Algum apontador? Usando o Debian

EDIT: Mesclar a saída com o File1 é fácil, pois

cat output.txt >> File1.txt

depois é só remover as duplicatas depois com uma expressão regular.

    
por James Berrisford 23.01.2017 / 10:07

1 resposta

2

Você pode catar ambos os arquivos (saída e arquivo1.txt) e depois encontrar as linhas uniq usando apenas uniq (sem switces) e finalmente gravar o resultado de volta no arquivo1.txt

Exemplo:

$ cat output.txt
Line1
$ cat file1.txt
Line1
Line3
Line4
$ echo "$(cat output.txt file1.txt |sort |uniq)" >file1.txt
$ cat file1.txt
Line1
Line3
Line4

Se você quiser que "Linha1" seja completamente removida e não seja mantida nem uma vez, use uniq -u.

$ echo "$(cat output.txt file1.txt |sort |uniq -u)" >file1.txt && cat file1.txt
Line3
Line4

Operação semelhante para o seu arquivo2.

PS: Você não pode escrever e escrever no mesmo arquivo em uma operação. Você deve usar o truque echo $(...) acima ou enviar a saída cat |uniq para outro arquivo (arquivo temporário) e, em seguida, renomear tempfile para arquivo1 ( mv tempfile file1.txt ) ou cat tmpfile >file1.txt && rm tmpfile .

Outra solução seria anexar output.txt ao arquivo1.txt ( cat output.txt >>file1.txt ) e usar sed -i para remover as linhas duplicadas

    
por 23.01.2017 / 12:23