Board logo

标题: [文本处理] 批处理如何提取特定内容重复的行?[已解决] [打印本页]

作者: 每天几分    时间: 2022-11-28 17:08     标题: 批处理如何提取特定内容重复的行?[已解决]

本帖最后由 每天几分 于 2022-11-28 22:56 编辑

文本1
  1. 进行 jbxk
  2. 还有 hdyz
  3. 见家长 jjv
  4. 中国 vsgohl
  5. 进行 jbhhrj
  6. 进行 jbxkrj
  7. 进行 jbhgrj
  8. 进行 jbhkrj
  9. 已经 yijkns
  10. 还有 hdyzde
  11. 还有 hryzde
  12. 见家长 xjvta
  13. 见家长 jjvta
  14. ……
  15. 君不见高堂明镜悲白发 jbjf
  16. 君不见高堂明镜悲白发 jbxfv
  17. 君不见高堂明镜悲白发 jbjfv
  18. ……
复制代码
实现如下:
文本2
  1. ……
  2. 进行 jbxkrj
  3. 还有 hdyzde
  4. 见家长 jjvta
  5. 君不见高堂明镜悲白发 jbjfv
  6. ……
复制代码
即:如果后面行部分内容,跟前面行重复,则提取出来。

多谢楼下各位的帮助
作者: WHY    时间: 2022-11-28 20:02

  1. @echo off
  2. PowerShell "$arr = gc 1.txt -Read 0; $len = $arr.Count-1; $out = for($i=0; $i -lt $len; $i++){$arr[($i+1)..$len] -match ([regex]::Escape($arr[$i]) + '.+$')} sc 2.txt -Value $out"
  3. pause
复制代码

作者: Batcher    时间: 2022-11-28 20:13

回复 1# 每天几分
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1,2" %%i in ('type "1.txt"') do (
  5.     if not defined %%i (
  6.         set "%%i=1"
  7.     ) else (
  8.         set "_%%i=%%j"
  9.     )
  10. )
  11. (for /f "tokens=1* delims==" %%i in ('set _') do (
  12.     set "str=%%i"
  13.     echo !str:~1! %%j
  14. ))>"2.txt"
  15. endlocal
复制代码

作者: hfxiang    时间: 2022-11-28 21:27

  1. gawk "!b[$1]{a[++N]=$1}{b[$1]=$0;c[$1]++}END{for(i=0;i++<N;)if(c[a[i]]>1)print b[a[i]]}" 1.txt>2.txt
复制代码

作者: terse    时间: 2022-11-28 22:03

最近都是去重题
  1. PowerShell "cat .\1.txt|group {$_.split(\" \")[0]}|?{ $_.Count -gt 1 }|%% { $_.group[-1]}"
复制代码

作者: aloha20200628    时间: 2022-11-29 00:15

本帖最后由 aloha20200628 于 2022-11-29 00:19 编辑

试用 more+findstr 提炼一下纯P代码...
  1. @echo off &setlocal enabledelayedexpansion
  2. set/a "m=0"
  3. (for /f "delims=" %%s in (1.txt) do (
  4.      set/a "m+=1"
  5.      more +!m! "1.txt"|findstr /i /c:"%%~s"
  6. ))>2.txt
  7. endlocal&exit/b
复制代码

作者: WHY    时间: 2022-11-29 13:53

楼主每次提问都让人匪夷所思。
既然要提取最后一个重复项,为啥又说"部分内容相同"?文本2也是驴唇不对马嘴。




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