Board logo

标题: [文本处理] [已解决]批处理如何把重复字开头的行提取出来到单独的文本? [打印本页]

作者: 每天几分    时间: 2022-11-27 15:29     标题: [已解决]批处理如何把重复字开头的行提取出来到单独的文本?

文本1
  1. 的 diwy
  2. 的 dewy
  3. 一 yigg
  4. 是 uijh
  5. 了 lnbj
  6. 了 lebj
  7. 不 buch
  8. 在 zddf
  9. 这 vwyp
  10. 这 veyp
  11. 有 yzde
  12. 个 gewh
  13. 行 hhrf
  14. 行 xkrf
  15. 行 hgrf
  16. 人 rfww
  17. 上 uhhg
  18. 中 vskh
  19. 大 dadz
  20. 大 dddz
复制代码
把重复字开头的行提取出来到单独的文本,不重复的不用提取。
实现
文本2
  1. 的 diwy
  2. 了 lnbj
  3. 这 vwyp
  4. 大 dddz
  5. 行 hhrj
复制代码
文本3
  1. 的 dewy
  2. 了 lebj
  3. 这 veyp
  4. 行 xkrj
复制代码
文本4
  1. 行 hgrj
复制代码

作者: WHY    时间: 2022-11-27 17:15

  1. PowerShell "gc 1.txt | group{ ($_ -split '\t')[0] } | ?{ $_.Count - 1 } | forEach{ $n=1; $_.Group|forEach{ ac ('' + ++$n + '.txt') -Value  $_ } }"
复制代码

作者: WHY    时间: 2022-11-27 17:16

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%i in (1.txt) do (
  4.     set /a _%%i +=1
  5.     if !_%%i! EQU 1 (
  6.         set "#%%i=%%j"
  7.     ) else if !_%%i! EQU 2 (
  8.         >>2.txt echo;%%i !#%%i!
  9.         >>3.txt echo;%%i %%j
  10.     ) else if !_%%i! GEQ 3 (
  11.         set /a n = !_%%i! + 1
  12.         >>!n!.txt echo;%%i %%j
  13.     )
  14. )
  15. pause
复制代码

作者: hfxiang    时间: 2022-11-27 17:34

  1. 的 diwy
  2. 的 dewy
  3. 一 yigg
  4. 是 uijh
  5. 了 lnbj
  6. 了 lebj
  7. 不 buch
  8. 在 zddf
  9. 这 vwyp
  10. 这 veyp
  11. 有 yzde
  12. 个 gewh
  13. 行 hhrf
  14. 行 xkrf
  15. 行 hgrf
  16. 人 rfww
  17. 上 uhhg
  18. 中 vskh
  19. 大 dadz
  20. 大 dddz
复制代码
以ANSi编码格式保存为1.txt
下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe
执行
  1. gawk "!A[$1]{A[$1]=$0;next}{if(A[$1]!~/^[0-9]+$/){print A[$1]>\"2.txt\";print $0>\"3.txt\";A[$1]=3}else{print $0>A[$1]\".txt\"};A[$1]++}" 1.txt>con
复制代码
结果(2.txt)
  1. 的 diwy
  2. 了 lnbj
  3. 这 vwyp
  4. 行 hhrf
  5. 大 dadz
复制代码
结果(3.txt)
  1. 的 dewy
  2. 了 lebj
  3. 这 veyp
  4. 行 xkrf
  5. 大 dddz
复制代码
结果(4.txt)
  1. 行 hgrf
复制代码





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