Board logo

标题: [文本处理] 【已解决】求批处理: 提取A文本里重复的行到B文本 [打印本页]

作者: gu3669    时间: 2019-8-28 19:28     标题: 【已解决】求批处理: 提取A文本里重复的行到B文本

本帖最后由 gu3669 于 2019-8-28 23:26 编辑

求批处理: 提取A文本里重复的行到B文本
高手帮帮忙,多多感谢!!

A文本(全是邮箱):
1111@hbdaily.com.cn
2222@qq.com
3333@126.com
2222@126.com
1111@hbdaily.com.cn

运行批处理后的B文本:
1111@hbdaily.com.cn
作者: WHY    时间: 2019-8-28 20:47

  1. @if(0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt > b.txt
  3. pause & exit
  4. @end
  5. var map = [];
  6. while( !WSH.StdIn.AtEndOfStream ){
  7.     var s = WSH.StdIn.ReadLine();
  8.     map[s] = map[s] ? map[s]+1 : 1;
  9. }
  10. for( s in map ){ if( map[s] > 1 ) WSH.Echo(s); }
复制代码
  1. gawk "{a[$0]++}END{for(i in a)if(a[i]>1)print i}" a.txt > b.txt
复制代码
  1. PowerShell "$a=@{};forEach($s In (gc a.txt -ReadCount 0)){$a[$s]++};$b=forEach($s In $a.Keys){if($a[$s]-1){$s}};sc b.txt $b"
复制代码

作者: gu3669    时间: 2019-8-28 21:21

前面两段运行后都能生成B,但里面是空的,最后那个运行后没有任何反应,不知是哪里出问题了。
作者: gu3669    时间: 2019-8-28 21:47

再次运行了,跟上一次的结果一样。让你费心了,真不好意思。
作者: flashercs    时间: 2019-8-28 22:23

  1. @echo off
  2. pushd "%~dp0"
  3. set "infile=A.txt"
  4. set "outfile=B.txt"
  5. Powershell -NoProfile -Command "Get-Content \"%infile%\" | Group-Object | Where-Object {$_.Count -gt 1} | ForEach-Object { $_.Name } | Out-File -FilePath \"%outfile%\""
  6. pause
  7. exit /b
复制代码

作者: WHY    时间: 2019-8-28 22:23

用记事本打开 a.txt,在菜单上选“文件”—“另存为”,看看编码是不是 ansi
作者: gu3669    时间: 2019-8-28 23:19

用记事本打开 a.txt,在菜单上选“文件”—“另存为”,看看编码是不是 ansi
WHY 发表于 2019-8-28 22:23


是Unicode
作者: gu3669    时间: 2019-8-28 23:21

非常感谢5楼朋友,完全成功,太谢谢你了! 同时也谢谢2楼的朋友,付出怎么多辛苦,再次感谢大家的帮助。
作者: WHY    时间: 2019-8-29 08:33

回复 7# gu3669


    我的意思是,把 a.txt 另存为 ansi 编码。
或者,修改脚本第二行:
  1. type a.txt | cscript //nologo //e:jscript "%~f0" > b.txt
复制代码

作者: WHY    时间: 2019-8-29 08:35

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ( 'type a.txt ^| sort' ) do (
  4.     if /i "%%i" == "!s!" (
  5.         if not defined flag (set "flag=1" & echo;!s!)
  6.     ) else (
  7.         if defined flag set "flag="
  8.     )
  9.     set "s=%%i"
  10. )
  11. pause
复制代码





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