标题: [文本处理] 批处理如何删除含有特定内容的重复行?【已解决】 [打印本页]
作者: 每天几分 时间: 2022-11-22 23:46 标题: 批处理如何删除含有特定内容的重复行?【已解决】
本帖最后由 每天几分 于 2022-11-23 10:10 编辑
如:- 出 be#固
- 时 ec#固
- 们 bc#固
- 得 si#固
- 上 be#固
- 成 bc#固
- ……
复制代码
删除:复制代码
实现:- 出 be#固
- 时 ec#固
- 们 bc#固
- 得 si#固
- ……
复制代码
即前面所在行出现过“be#固、bc#固……”,就把后面带“be#固、bc#固……”所在行删除。
文本格式都是固定的:字+制表符+2个随机字母+#固,可以通过制表符后面的内容,来判定重复。
作者: hfxiang 时间: 2022-11-23 08:41
将- 出 be#固
- 时 ec#固
- 们 bc#固
- 得 si#固
- 上 be#固
- 成 bc#固
复制代码
以ANSI编码格式保存为1.txt
下载( http://bcn.bathome.net/tool/4.1.0/gawk.exe )
执行:- gawk "!a[$2]++" 1.txt>2.txt
复制代码
结果( 2.txt )- 出 be#固
- 时 ec#固
- 们 bc#固
- 得 si#固
复制代码
作者: Batcher 时间: 2022-11-23 09:46
回复 1# 每天几分
如果输出的行序没有严格要求:- @echo off
- cd /d "%~dp0"
- setlocal
- for /f "tokens=1*" %%i in ('type "1.txt"') do (
- if not defined _%%j (
- set "_%%j=%%i %%j"
- )
- )
- (for /f "tokens=1* delims==" %%i in ('set _') do (
- echo,%%j
- ))>"2.txt"
- endlocal
复制代码
作者: WHY 时间: 2022-11-23 12:59
- @if(0)==(0) echo off
- type 1.txt | cscript //nologo //e:jscript "%~f0" > 2.txt
- pause & exit /b
- @end
-
- var obj = {};
- while( !WSH.StdIn.AtEndOfStream ){
- var s = WSH.StdIn.ReadLine();
- var m = s.match(/^\S+\t(\S+)$/);
- if( m == null || obj.hasOwnProperty(m[1]) ) continue;
- obj[m[1]] = true;
- WSH.Echo(s);
- }
复制代码
作者: WHY 时间: 2022-11-23 13:23
test.ps1- $srcFile = '1.txt'; #源文件名
- $dstFile = '2.txt'; #修改后的文件名
- $hash = @{};
- $res = [Collections.ArrayList]@();
-
- forEach( $strLine In [IO.File]::ReadAllLines($srcFile, [Text.Encoding]::Default) ){
- $arr = $strLine.Trim().Split();
- if( $arr.Count -eq 2 -and !$hash.ContainsKey($arr[1]) ){
- $hash.Add( $arr[1], $true );
- [void]$res.Add( $strLine );
- }
- }
-
- [IO.File]::WriteAllLines( $dstFile, $res, [Text.Encoding]::Default );
复制代码
作者: qixiaobin0715 时间: 2022-11-24 09:31
- @echo off
- (for /f "tokens=1* delims= " %%i in (1.txt) do (
- if not defined _"%%j" (
- echo,%%i %%j
- set _"%%j"=true
- )
- ))>2.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |