找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21409|回复: 11

[文本处理] 请问bat如何按指定列来删除重复行

[复制链接]
发表于 2023-9-18 14:59:02 | 显示全部楼层 |阅读模式
  1.   需批量处理多个文件    请问bat如何按指定列来删除重复行
  2. A*B*3        A
  3. A*B*C        B
  4. A*B*C        A

  5. 需将Tab "\t" 为分隔符  , 不能按 "*" 为分隔符
  6. bat完成按指定第列数值去重复, 例如第 1列,   如果第1列有重复情况,  似乎删那一行都没问题

  7. >*.txt
  8. A*B*3        A
  9. A*B*C        B
复制代码
发表于 2023-9-18 17:10:34 | 显示全部楼层
回复 1# 娜美

  1. gawk "!x[$1]++" 1.txt>2.txt
复制代码
 楼主| 发表于 2023-9-18 17:19:27 | 显示全部楼层
回复 2# hfxiang


awk -F "\t" '!a[$1]++' a
    嗯嗯, 但是我想用bat来实现
 楼主| 发表于 2023-9-18 19:54:18 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%x in ('dir /b /a-d *.txt') do (
  4.         for /f "useback tokens=1-9* delims=        " %%a in ("%%x") do (
  5.                 if %%h equ 1 (
  6.                 if not defined %%i (
  7.                echo,%%i
  8.                set %%i=1
  9.   )
  10. )))>%%x.txt
  11. endlocal
  12. pause
复制代码
拼凑了一个为什么没有输出呢
发表于 2023-9-18 19:58:40 | 显示全部楼层
本帖最后由 Five66 于 2023-9-18 20:06 编辑

啊,回错帖子了,已编辑
发表于 2023-9-18 20:18:48 | 显示全部楼层
本帖最后由 Five66 于 2023-9-18 20:47 编辑

不知行否(改2)
参考
http://www.bathome.net/thread-67375-1-1.html
12楼

  1. @echo off
  2. for %%a in (*.txt) do (
  3. setlocal enabledelayedexpansion
  4. (for /f "usebackq tokens=1-2* delims=        " %%i in ("%%a") do (
  5.     if not defined #%%j (
  6.         echo,%%i        %%j        %%k
  7.         set #%%j=1
  8.     )
  9. ))>"___new-%%a.txt"
  10. endlocal
  11. )
  12. pause
复制代码
发表于 2023-9-18 21:21:35 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.         cd.>"%%~ni_2%%~xi"
  4.         for /f "useback tokens=1* delims=        " %%a in ("%%i") do (
  5.                 findstr /bc:"%%a        " "%%~ni_2%%~xi" 1>nul
  6.                 if errorlevel 1 (
  7.                         >>"%%~ni_2%%~xi" echo %%a        %%b
  8.                 )
  9.         )
  10. )
  11. pause
复制代码
 楼主| 发表于 2023-9-18 21:52:38 | 显示全部楼层
多谢楼上3位大哥哥
发表于 2023-9-18 22:17:51 | 显示全部楼层
  1. @echo off
  2. set n=2
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.      setlocal enabledelayedexpansion
  5.      for /f "useback delims=" %%j in ("%%i") do (
  6.           for /f "tokens=%n%" %%k in ("%%j") do (
  7.         if not defined #%%k (
  8.                     echo,%%j
  9.                     set #%%k=1
  10.                )
  11.           )
  12.      )
  13.     endlocal
  14. )

  15. pause
复制代码
 楼主| 发表于 2023-9-19 09:00:31 | 显示全部楼层
回复 6# Five66


    结果不准确
 楼主| 发表于 2023-9-19 09:03:05 | 显示全部楼层
回复 7# 77七


   虽然区分了大小写, 但 似乎不支持特殊字符,  是不是循环内部问题呢
发表于 2023-9-19 09:13:56 | 显示全部楼层
回复 11# 娜美


   
findstr的问题,只是提供一种思路,区别大小写。
比如文本没有特殊符号,只需要区别大小写查重,”适用“就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:12 , Processed in 0.011049 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表