Qual é a maneira mais fácil de comparar 2 arquivos e excluir as duplicatas encontradas em ambos os arquivos. Estou ciente de que você pode fazer isso facilmente em uma caixa linux com certos comandos, mas como eu faria para conseguir isso em um computador com Windows? Eu pensei que haveria uma maneira de fazer isso no Notepad ++, mas não consigo encontrar uma.
As outras respostas aqui não suportam um usuário no Windows ou não funcionam.
GNUWin32
Se você deseja instalar software adicional de terceiros, o projeto GNUWin (GNUWin32) oferece portas Windows de vários desses utilitários (comandos).
Os próprios utilitários são oferecidos em pacotes com um único utilitário ou vários utilitários agrupados em cada um. Cada pacote pode ser instalado separadamente 1 , com exceção de alguns pacotes onde os utilitários incluídos dependem de outros.
O pacote básico que você provavelmente deseja instalar é o pacote CoreUtils, mas também existem outros pacotes disponíveis (dependendo de quais utilitários você deseja usar).
Pelo que vale a pena, incluí alguns arquivos em lote de exemplo simples usando utilitários GNUWin32 que podem ajudá-lo em outra seção desta resposta.
Alternativas GNUWin32
Deixando de lado o Windows Subsystem for Linux (WSL) no Windows 10, existem outras opções possíveis para usar esses tipos de utilitários no Windows, como Git for Windows e Cygwin .
Essas versões geralmente têm a vantagem de serem mais atualizadas do que suas contrapartes GNUWin32, mas sem dúvida podem faltar facilidade de instalação e uso.
1 O Projeto GNUWin32 oferece um utilitário de download chamado GetGnuWin32 , que pode lidar com o download e a instalação de todos os pacotes GNUWin32 disponíveis de uma só vez (se essa for sua opção preferida).
Bloco de Notas++
Pessoalmente, não conheço nenhum plug-in ou recurso do Notepad ++ que suporte totalmente o que você está tentando realizar. No entanto, o Notepad++ pode executar scripts, comandos e executáveis em lote diretamente por meio do menu Notepad++ Run...F5 ( ) ou do plug-in NppExec e, portanto, pode ser usado (até certo ponto) em conjunto com, por exemplo, os utilitários GNUWin32.
Com isso dito, não tenho certeza de um bom mecanismo para alimentar arquivos abertos separados como um grupo para qualquer coisa listada acima. Uma solução parcial é combinar os dois arquivos em um, classificá-los, salvar o arquivo e, em seguida, executar uma variação do arquivo de lote de exemplo "Single File Output" fornecido posteriormente nesta resposta em relação ao arquivo salvo.
O Notepad++ oferece suporte a mais interações de baixo nível com o editor por meio do plug-in Python Script for Notepad++ (baseado em uma versão independente do Python 2.7). Infelizmente, minha experiência com esse plug-in é limitada, por isso não tenho certeza de como ele pode ajudá-lo a obter a funcionalidade desejada (se for o caso).
Se você quiser experimentar o plug-in Python Script for Notepad++, poderá instalá-lo na interface Plugins → Plugins Admin... no Notepad++.
Exemplos de lote GNUWin32
Os exemplos de arquivo batch (
.bat
) dados abaixo aproveitam os utilitários GNUWin32 e destinam-se a mostrar algumas abordagens rudimentares para (espero) atingir seus objetivos. Mas são apenas referências. Eles quase certamente podem ser melhorados ou mesmo ignorados em favor de outras abordagens.Esses arquivos em lote assumem que o pacote GNUWin32 CoreUtils está instalado (para os utilitários
sort
,uniq
e ).comm
O exemplo que usacomm
também requer sed (um pacote separado).Para completar, os seguintes arquivos de texto (mínimos) foram usados como entrada de teste para os scripts de exemplo descritos abaixo:
ex. dup1.txt
Linha exclusiva:
123
--
ex. dup2.txt
Linha exclusiva:
jkl
Lote de Exemplo - Saída de Arquivo Único
Em conjunto com, por exemplo, o pacote GNUWin32 CoreUtils, você pode criar um arquivo de lote do Windows que suporte arrastar/soltar dois arquivos de texto nele e, em seguida, ter as linhas não duplicadas exibidas como um terceiro arquivo único aberto em ex. Bloco de Notas++:
ex. nodupes.bat
Observe que no exemplo acima,
gnu-sort
é o utilitário GNUWin32sort
, renomeado para evitar conflitos no Windows (consulte a seção Conflitos do Windows ).Embora esse arquivo em lote possa ser usado no modo "arrastar e soltar" por conveniência, você também pode passar os nomes de arquivo relevantes diretamente na linha de comando, por exemplo,
nodupes.bat dup1.txt dup2.txt
. Isso também é verdade para os outros exemplos de lote nesta seção.Lote de Exemplo - Saída de Arquivo Único (Notepad++)
Para obter algo semelhante mais diretamente no Notepad ++, você pode criar um novo arquivo em lote semelhante ao já descrito acima, mas com uma única entrada:
ex. nodupes-npp.bat
Em seguida, você salvaria esse
.bat
arquivo em um local estático para referência do Notepad ++. Em seguida, no Notepad ++, por exemplo, no menu Executar...F5 ( ), você pode invocar este arquivo em lote para qualquer arquivo (único) que esteja aberto no momento:No entanto, existem algumas ressalvas a essa abordagem:
1) O arquivo atual aberto precisaria ser uma versão combinada dos dois arquivos dos quais você deseja comparar os dados.
2) O arquivo ao qual você deseja aplicar isso deve ser salvo antes de usar esta abordagem
.bat
/ Executar.... Isto é porque:"$(FULL_CURRENT_PATH)"
não está disponível no Notepad++ até que o arquivo seja salvo.Se forem feitas alterações no arquivo, todas as atualizações precisam ser aplicadas ao arquivo real que está sendo acessado (ou seja, a versão em disco, não a versão atualmente aberta no Notepad++).
Lote de Exemplo - Saída de Arquivo Múltiplo
Se você quiser linhas únicas divididas (relativamente) por seus arquivos de origem, você pode usar uma combinação de
comm
esed
:ex. nodupes-separated.bat
ex. filtro.sed
Observe que, embora
comm
faça parte do pacote CoreUtils, o sed é um download separado com o GNUWin32 . Lembre-se de que o arquivo de lote acima não alterará seus arquivos originais, mas criará dois novos (portanto, renomeá-los depende de você). Além disso, como está escrito, ex.filter.sed
precisa estar no mesmo diretório do seu arquivo de lote (por exemplonodupes-separated.bat
, ).Conflitos do Windows (GNUWin32)
O GNUWin32 contém alguns utilitários com o mesmo nome dos utilitários ou comandos do Windows (por exemplo
sort
, ). Isso pode apresentar um problema (leve), pois cada utilitário pode operar de maneira diferente. Os conflitos que conheço pessoalmente no pacote GNUWin32 CoreUtils são:Lembre-se de que também pode haver outros conflitos em pacotes separados, por exemplo,
tree
.Se você deseja acessar as versões do GNUWin32 a partir do caminho do seu ambiente (ou seja, sem digitar o caminho completo), você pode renomear os próprios executáveis GNUWin32 apropriados (recomendado) ou usar arquivos de lote substitutos cujos nomes são diferentes (menos desejáveis). Um arquivo de lote substituto simplesmente conteria, por exemplo:
ex. gnu-utility.bat
Usando versões de utilitários do Windows
Você pode usar a versão do Windows de um utilitário, mas eles podem exigir o retrabalho de como você aborda as coisas. Por exemplo, o Windows,
sort
por padrão, pode receber apenas uma entrada por vez, portanto, onodupes.bat
exemplo original acima pode se parecer com o seguinte ao usá-lo:ex. nodupes-win-sort.bat
Notas (GNUWin32)
Para que os utilitários GNUWin32 funcionem sem especificar um caminho completo, você desejará adicioná-los ao caminho do ambiente no Windows. Caso contrário, você precisará especificar caminhos completos para cada executável (esteja ciente de que isso pode causar dores de cabeça, por exemplo, com encanamento).
Os pacotes GNUWin32 são indiscutivelmente melhor colocados em uma pasta "normal" do Windows que você cria (ou seja, não
C:\Program Files
,C:\Program Files (x86)
ou suaUser
pasta).Da mesma forma, você deve tentar instalar o GNUWin32 em um caminho sem espaços (por exemplo,
C:\Programs\GNUWin32
).Embora o pacote GNUWin32 CoreUtils suporte uma variedade de ferramentas básicas, ainda há um grande número de utilitários disponíveis como seus próprios pacotes individuais ou grupos de utilitários . Além disso, alguns utilitários podem funcionar de maneira ligeiramente diferente ou ter opções/sintaxe mais limitadas simplesmente porque o sistema operacional subjacente (Windows) não é, por exemplo, Linux.