You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Findstr仅基于第一列对比文本文件并生成差异文件[批处理]

我懂你这种尴尬——之前找的方法全是对比整行的,但你真正要的只是第一列的差异对吧?别着急,下面给你几个靠谱的解决方案,不管你习惯用脚本还是原生命令都能搞定:

方案1:Python脚本(灵活易扩展,跨平台可用)

这个脚本专门针对“只对比第一列”的需求,还能自动处理空行、去重,最后把差异输出到目标文件。

# 定义文件路径(注意路径里的反斜杠前面加r,避免转义问题)
file1_path = r"E:\Compare_file\file_1.txt"
file2_path = r"E:\Compare_file\file_2.txt"
output_path = r"E:\Compare_file\file_3.txt"

# 提取文件的第一列,返回去重后的集合
def extract_first_column(file_path):
    first_cols = set()
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            if not stripped_line:  # 跳过空行
                continue
            # 默认用空白字符(空格/制表符)分割,如果你是其他分隔符,比如逗号,改成split(',')[0]
            first_col = stripped_line.split()[0]
            first_cols.add(first_col)
    return first_cols

# 获取两个文件的第一列集合
col_set_1 = extract_first_column(file1_path)
col_set_2 = extract_first_column(file2_path)

# 找出对称差异:只在其中一个文件出现的条目
diff_items = col_set_1.symmetric_difference(col_set_2)

# 将差异写入输出文件(排序后更易读)
with open(output_path, 'w', encoding='utf-8') as out_f:
    for item in sorted(diff_items):
        out_f.write(f"{item}\n")

print(f"搞定!差异内容已经写入 {output_path}")

小提示:如果你的文件第一列是用制表符、逗号这类固定分隔符分割的,把split()[0]改成对应的写法就行——比如制表符用split('\t')[0],逗号用split(',')[0]。

方案2:Windows PowerShell命令(原生工具,无需额外安装)

如果你不想写脚本,用Windows自带的PowerShell就能快速处理:

# 提取两个文件的第一列,去重后对比差异,输出到目标文件
$col1 = Get-Content "E:\Compare_file\file_1.txt" | ForEach-Object { ($_ -split '\s+')[0] } | Where-Object { $_ } | Select-Object -Unique
$col2 = Get-Content "E:\Compare_file\file_2.txt" | ForEach-Object { ($_ -split '\s+')[0] } | Where-Object { $_ } | Select-Object -Unique
Compare-Object -ReferenceObject $col1 -DifferenceObject $col2 | Select-Object -ExpandProperty InputObject | Out-File "E:\Compare_file\file_3.txt" -Encoding utf8

解释下关键部分:

  • ($_ -split '\s+')[0]:用任意数量的空白字符分割每行,提取第一列
  • Where-Object { $_ }:跳过空行,避免无效内容干扰
  • Select-Object -Unique:自动去重(如果你的文件第一列没有重复,可以去掉这部分)
  • Compare-Object:专门用来对比两个集合的差异,InputObject就是我们要的差异条目
方案3:针对CSV格式文件(如果你的文件是逗号分隔的)

如果你的.txt其实是CSV格式(第一列是ID或其他标识),用PowerShell的Import-CSV会更省心:

# 假设文件没有表头,我们手动指定第一列名为"FirstCol",分隔符用逗号
$csv1 = Import-CSV "E:\Compare_file\file_1.txt" -Delimiter ',' -Header "FirstCol", "OtherColumns"
$csv2 = Import-CSV "E:\Compare_file\file_2.txt" -Delimiter ',' -Header "FirstCol", "OtherColumns"
Compare-Object $csv1.FirstCol $csv2.FirstCol | Select-Object -ExpandProperty InputObject | Out-File "E:\Compare_file\file_3.txt" -Encoding utf8

如果你的文件已经有表头,直接去掉-Header参数就行。

要是你的文件有特殊格式(比如固定宽度的第一列),随时告诉我,我再给你调整方案~

内容的提问来源于stack exchange,提问作者Muzzy Izzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:26:56