Board logo

标题: [文本处理] 请问bat如何按指定列来删除重复行 [打印本页]

作者: 娜美    时间: 2023-9-18 14:59     标题: 请问bat如何按指定列来删除重复行

  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
复制代码

作者: hfxiang    时间: 2023-9-18 17:10

回复 1# 娜美
  1. gawk "!x[$1]++" 1.txt>2.txt
复制代码

作者: 娜美    时间: 2023-9-18 17:19

回复 2# hfxiang


awk -F "\t" '!a[$1]++' a
    嗯嗯, 但是我想用bat来实现
作者: 娜美    时间: 2023-9-18 19:54

  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
复制代码
拼凑了一个为什么没有输出呢
作者: Five66    时间: 2023-9-18 19:58

本帖最后由 Five66 于 2023-9-18 20:06 编辑

啊,回错帖子了,已编辑
作者: Five66    时间: 2023-9-18 20:18

本帖最后由 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
复制代码

作者: 77七    时间: 2023-9-18 21:21

  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

多谢楼上3位大哥哥
作者: terse    时间: 2023-9-18 22:17

  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

回复 6# Five66


    结果不准确
作者: 娜美    时间: 2023-9-19 09:03

回复 7# 77七


   虽然区分了大小写, 但 似乎不支持特殊字符,  是不是循环内部问题呢
作者: 77七    时间: 2023-9-19 09:13

回复 11# 娜美


   
findstr的问题,只是提供一种思路,区别大小写。
比如文本没有特殊符号,只需要区别大小写查重,”适用“就行。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2