[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】求批处理: 提取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

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

评分人数

    • gu3669: 乐于助人,非常感谢!技术 + 1

TOP

前面两段运行后都能生成B,但里面是空的,最后那个运行后没有任何反应,不知是哪里出问题了。

TOP

再次运行了,跟上一次的结果一样。让你费心了,真不好意思。

TOP

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

评分人数

    • gu3669: 乐于助人,功夫了得!技术 + 1
微信:flashercs
QQ:49908356

TOP

用记事本打开 a.txt,在菜单上选“文件”—“另存为”,看看编码是不是 ansi

TOP

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


是Unicode

TOP

非常感谢5楼朋友,完全成功,太谢谢你了! 同时也谢谢2楼的朋友,付出怎么多辛苦,再次感谢大家的帮助。

TOP

回复 7# gu3669


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

TOP

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

TOP

返回列表