AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1519027
Accepted
holograms
holograms
Asked: 2020-01-22 10:10:30 +0800 CST2020-01-22 10:10:30 +0800 CST 2020-01-22 10:10:30 +0800 CST

比较两个文件并删除重复项

  • 772

比较两个文件并删除两个文件上的重复项的最简单方法是什么。我知道您可以使用某些命令在 linux 机器上轻松完成此操作,但我将如何在 Windows 计算机上实现此目标?我认为在 Notepad++ 上会有一种方法可以做到这一点,但我似乎找不到。

此处的其他答案不支持 Windows 上的用户或不起作用。

notepad++ notepad
  • 1 1 个回答
  • 5121 Views

1 个回答

  • Voted
  1. Best Answer
    Anaksunaman
    2020-01-26T00:59:04+08:002020-01-26T00:59:04+08:00

    我知道您可以使用某些命令在 Linux 机器上轻松完成此操作,但我将如何在 Windows 计算机上实现此目标?

    GNUWin32

    如果您愿意安装额外的第三方软件,GNUWin (GNUWin32) 项目提供了许多此类实用程序(命令)的 Windows 端口。

    实用程序本身以包的形式提供,每个包中包含一个实用程序或多个实用程序。每个软件包都可以单独安装1,但某些软件包除外,其中包含的实用程序依赖于其他软件包。

    您最可能想要安装的基本包是CoreUtils 包,但也有其他可用的包(取决于您可能希望使用的实用程序)。

    对于它的价值,我已经包含了一些使用 GNUWin32 实用程序的简单示例批处理文件,这可能会在此答案的另一部分对您有所帮助。

    GNUWin32 替代品

    除了 Windows 10 中的 Windows Linux 子系统 (WSL),还有其他可能的选项可以在 Windows 上使用这些类型的实用程序,例如Git for Windows和Cygwin。

    这些版本通常具有比 GNUWin32 版本更新的优势,但可以说可能缺乏安装和使用的便利性。


    1 GNUWin32 项目提供了一个名为GetGnuWin32的下载实用程序,它可以一次性下载和安装所有可用的 GNUWin32 软件包(如果这是您的首选)。

    记事本++

    我个人不知道有任何 Notepad++ 插件或功能完全支持您要完成的工作。但是,Notepad++ 可以直接通过 Notepad++运行...菜单 ( F5) 或 NppExec 插件运行批处理脚本、命令和可执行文件,因此可以(在某种程度上)与 GNUWin32 实用程序一起使用。

    话虽如此,我不确定将单独的打开文件作为一个组提供给上面列出的任何内容的良好机制。一种部分解决方法是将两个文件合并为一个,对它们进行排序,保存文件,然后针对该保存的文件运行此答案后面给出的“单个文件输出”示例批处理文件的变体。

    Notepad++ 确实支持通过Python Script for Notepad++ 插件(基于 Python 2.7 的自包含版本)与编辑器进行更多低级交互。不幸的是,我对该插件的经验有限,所以我不确定它如何能够帮助您实现所需的功能(如果有的话)。

    如果您想自己尝试使用 Python Script for Notepad++ 插件,您可以在 Notepad++ 的Plugins → Plugins Admin...界面下安装它。


    GNUWin32 批处理示例

    下面给出的批处理 ( .bat) 文件示例利用了 GNUWin32 实用程序,旨在展示一些(希望)实现目标的基本方法。但它们只是参考。几乎可以肯定,它们可以一起改进甚至忽略,以支持其他方法。


    这些批处理文件假定安装了 GNUWin32 CoreUtils包(用于sort,uniq和comm实用程序)。使用的示例comm还需要sed(一个单独的包)。


    为了完整起见,以下(最小)文本文件用作下面概述的示例脚本的测试输入:

    前任。dup1.txt

    abc
    def
    123
    ghi
    

    独特线: 123

    --

    前任。dup2.txt

    ghi
    abc
    jkl
    def
    

    独特线: jkl


    示例批处理 - 单个文件输出

    结合例如 GNUWin32 CoreUtils 包,您可以创建一个 Windows 批处理文件,该文件支持将两个文本文件拖放到上面,然后将不重复的行显示为在 ex. 中打开的第三个单个文件。记事本++:

    前任。nodupes.bat

    @ECHO Off
    
    @REM Two input files (paths)
    gnu-sort %1 %2 | uniq -u > uniq_text.txt
    
    @REM Check our command output.
    :: PAUSE
    
    START notepad++.exe uniq_text.txt
    

    请注意,在上面的示例中,gnu-sort是 GNUWin32sort实用程序,已重命名以避免 Windows 中的冲突(请参阅Windows 冲突部分)。


    虽然为了方便起见,可以在“拖放”模式下使用此批处理文件,但您也可以直接在命令行中传递相关文件名,例如nodupes.bat dup1.txt dup2.txt. 本节中的其他批处理示例也是如此。


    示例批处理 - 单个文件输出 (Notepad++)

    要在 Notepad++ 中更直接地实现类似的功能,您可以创建一个类似于上面已经描述的新批处理文件,但只有一个输入:

    前任。nodupes-npp.bat

    @ECHO Off
    
    @REM One input file (path)
    gnu-sort %1 | uniq -u > C:\path\to\uniq_text.txt
    
    START notepad++ C:\path\to\uniq_text.txt
    

    然后,您可以将此.bat文件保存在静态位置以供 Notepad++ 参考。然后,在 Notepad++ 中,例如在Run...菜单 ( F5) 下,您可以为当前打开的任何(单个)文件调用此批处理文件:

    cmd /c C:\path\to\nodupes-npp.bat "$(FULL_CURRENT_PATH)"
    

    但是,这种方法存在一些注意事项:

    1)当前打开的文件需要是您希望比较数据的两个文件的组合版本。

    .bat2)在使用此/ Run...方法之前,必须保存您希望应用它的文件。这是因为:

    • "$(FULL_CURRENT_PATH)"在保存文件之前在 Notepad++ 中不可用。

    • 如果对文件进行了更改,则需要对正在访问的实际文件应用任何更新(即磁盘上的版本,而不是当前在 Notepad++ 中打开的版本)。

    示例批处理 - 多文件输出

    如果您想要由原始文件(相对)划分的唯一行,您可以改用commandsed的组合:

    前任。nodupes-separated.bat

    @ECHO Off
    
    @REM Use sed to divide our comm -3 output into two files,
    @REM using a simple sed script (filter.sed).
    
    gnu-sort %1 > sorted_duplicates_1.txt
    gnu-sort %2 > sorted_duplicates_2.txt
    
    comm -3 sorted_duplicates_1.txt sorted_duplicates_2.txt | sed -f filter.sed
    
    @REM Check our command output.
    :: PAUSE
    
    @REM Clean up our temporary files.
    DEL sorted_duplicates_1.txt
    DEL sorted_duplicates_2.txt
    
    @REM These file names are defined in ex. filter.sed
    START notepad++ uniq_text_1.txt
    START notepad++ uniq_text_2.txt
    

    前任。过滤器.sed

    /^\t/ {
        s///
        w uniq_text_2.txt
        d
    }
    /^[^\t]/ {
        w uniq_text_1.txt
        d
    }
    

    请注意,虽然comm是 CoreUtils 包的一部分,但sed 是与 GNUWin32 一起单独下载的。请记住,上面的批处理文件不会改变您的原始文件,它会创建两个新文件(因此重命名它们取决于您)。此外,如书面,前。filter.sed需要与批处理文件位于同一目录中(例如nodupes-separated.bat)。


    Windows 冲突 (GNUWin32)

    GNUWin32 包含一些与 Windows 实用程序或命令同名的实用程序(例如sort)。这可能会带来(轻微的)问题,因为每个实用程序的运行方式可能不同。我个人在 GNUWin32 CoreUtils 包中意识到的冲突是:

    • 日期
    • 目录
    • 回声
    • 寻找
    • 主机名
    • 种类
    • 我是谁

    请记住,单独的包中也可能存在其他冲突,例如tree.


    如果您想从您的环境路径访问 GNUWin32 版本(即不输入其完整路径),您可以自己重命名适当的 GNUWin32 可执行文件(推荐)或使用名称不同的代理批处理文件(不太理想)。代理批处理文件将仅包含例如:

    前任。gnu-utility.bat

    @ECHO Off
    C:\path\to\GNUWin32\bin\utility.exe %*
    

    使用 Windows 实用程序版本

    您也许可以使用 Windows 版本的实用程序,但它们可能需要修改您处理事情的方式。例如,sort默认情况下,Windows 一次只能接受一个输入,因此nodupes.bat上面的原始示例在使用时可能如下所示:

    前任。nodupes-win-sort.bat

    @ECHO Off
    
    @REM Helps compensate for a minor issue with cat and newlines
    ECHO. > blank
    
    @REM Using Windows sort, not GNUWin32 sort
    cat %1 blank %2 | sort | uniq -u > uniq_text.txt
    
    @REM Clean up our temporary file.
    DEL blank
    
    START notepad++.exe uniq_text.txt
    

    注释 (GNUWin32)

    • 要使 GNUWin32 实用程序在不指定完整路径的情况下工作,您需要将它们添加到 Windows 中的环境路径中。否则,您将需要指定每个可执行文件的完整路径(请注意,这可能会导致头痛,例如使用管道)。

    • GNUWin32 软件包可以说最好放在您创建的“常规”Windows 文件夹中(即不是C:\Program Files,C:\Program Files (x86)或您的User文件夹)。

    • 您还应该尝试将 GNUWin32 安装到没有空格的路径中(例如C:\Programs\GNUWin32)。

    • 虽然 GNUWin32 CoreUtils 包支持各种基本工具,但仍有相当多的实用程序可以作为它们自己的单独包或实用程序组使用。此外,某些实用程序的工作方式可能略有不同或具有更多有限的选项/语法,这仅仅是因为底层操作系统(Windows)不是例如 Linux。

    • 0

相关问题

  • 在 Notepad++“另存为...”对话框中保留当前文件类型/扩展名

  • 计算文本字符串中的逗号并添加新行

  • 删除信息

  • Notepad++ 删除直到冒号替换所有行

  • NotePad++ 用户定义语言不显示条件语句

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve