标题: [文本处理] 求助批处理多文本合并中的同行合并,不懂,求指教 [打印本页]
作者: ben3ben3 时间: 2020-5-6 15:32 标题: 求助批处理多文本合并中的同行合并,不懂,求指教
本帖最后由 ben3ben3 于 2020-5-17 12:54 编辑
txt1内容:
1|603177|48|立案日期:20200429
1|600090|48|立案日期:20200427
0|000662|48|立案日期:20200426
1|600978|48|立案日期:20200424
0|000506|48|立案日期:20200415
0|300367|48|立案日期:20200415
txt2内容:
1|603177|48|原因:董监高违法违规 进展:立案调查中
1|600090|48|原因:信披违法违规 进展:立案调查中
0|000662|48|原因:信披违法违规 进展:立案调查中
1|600978|48|原因:信披违法违规 进展:立案调查中
0|000506|48|原因:信披违法违规 进展:立案调查中
0|300367|48|原因:信披违法违规 进展:立案调查中
如何合并成如下内容:
1|603177|48|立案日期:20200429 原因:董监高违法违规 进展:立案调查中
1|600090|48|立案日期:20200427 原因:信披违法违规 进展:立案调查中
0|000662|48|立案日期:20200426 原因:信披违法违规 进展:立案调查中
1|600978|48|立案日期:20200424 原因:信披违法违规 进展:立案调查中
0|000506|48|立案日期:20200415 原因:信披违法违规 进展:立案调查中
0|300367|48|立案日期:20200415 原因:信披违法违规 进展:立案调查中
作者: netdzb 时间: 2020-5-6 16:12
回复 1# ben3ben3
哪里不懂?代码呢?
作者: netdzb 时间: 2020-5-6 16:31
回复 1# ben3ben3
这个有点难度啊,比对2个文本的字符串,统计次数吗?
作者: Batcher 时间: 2020-5-6 16:56
回复 1# ben3ben3
请举例说明不是【1次】的情况是什么样子的
作者: ivor 时间: 2020-5-7 08:15
次数:固定1次- gc 1.txt | %{$txt1 = [regex]::Split($_,"\b(?=立案)")
- $txt2 = Select-String -SimpleMatch $txt1[0] 2.txt
- $txt2 = [regex]::Split($txt2,"\b(?=原因)")
- $txt3 += $_ + "1次 " + $txt2[1] + "`n"
- Write-Host $_"1次" $txt2[1]
- }
- [System.IO.File]::WriteAllText("3.txt",$txt3)
复制代码
作者: xp3000 时间: 2020-5-7 11:46
我估计是1txt从“立案”前面开始分割,显示1、2部分
2txt从“原因”前面开始分割,显示3、4部分
把4部分去搜索1部分,搜索的次数作为值作为变量5,
再以变量1、2、5、4排列显示
作者: smss 时间: 2020-5-7 11:58
活捉国家法院文案偷懒现场
作者: xp3000 时间: 2020-5-7 12:06
要是有关部门很可能有的还是XP,去年国庆节看见某国企XP操作系统
作者: netdzb 时间: 2020-5-7 15:37
回复 7# smss
批处理,不算偷懒吧。
作者: funken 时间: 2020-5-11 22:04
本帖最后由 funken 于 2020-5-11 22:06 编辑
这个有两个方法,可以直接搜索第三个|前相同的行合并到一行,方法二,直接依次读文本,相同行合并到一行
第二个方法速度快些,但如果文本顺序不同,就会出错,第一个慢些,但准确,不会出错
看了下,发现你这个还要有次数,就需要用到findstr搜索了,再统计含关键字,有几行来计次。
作者: gao_leyun_km 时间: 2020-5-12 19:45
本帖最后由 gao_leyun_km 于 2020-5-13 10:15 编辑
说明:该脚本对两个文件中相同编号的信息没有顺序对应要求。输出文件中次数计为2.txt中同一编号出现的次数;前四列信息均来自1.txt中该编号第一次出现的行,略不检验同1.txt其余行和2.txt相容与否;其余信息均来自2.txt中该编号第一次出现的行,略不检验同2.txt其余行相容与否。如果txt文件是UTF-8编码的把下面这个批处理用UTF-8编码存到相同目录运行即可,如果txt文档为其他编码请自行设定bat文件为相同编码,并修改chcp后的数值。正常运行cmd窗口无任何输出,运行完成后将在同一目录生成Merge.txt并自动用记事本打开。- @echo off&setlocal enabledelayedexpansion&>nul chcp 65001
- if exist "%~dp0Merge.txt" del "%~dp0Merge.txt"
- for /f usebackq^ tokens^=1^,2*^ delims^=^| %%a in ("%~dp01.txt") do if not defined %%b (
- set %%b=1
- set N=0
- for /f usebackq^ tokens^=2^,4^ delims^=^| %%d in ("%~dp02.txt") do if "%%b"=="%%d" set /a N=!N!+1&if !N! EQU 1 set O1=%%a^|%%b^|%%c&set O2=%%e
- >>"%~dp0Merge.txt" echo !O1! !N!次 !O2!
- )
- start notepad.exe "%~dp0Merge.txt"
- ping 127.1 -n 1 >nul
- exit
复制代码
作者: ben3ben3 时间: 2020-5-17 12:56
抱歉,各位老师,这个就是两个文本里面 不相同部分合并成一条,无需次数统计。我还不太懂批处理。所以求助!
作者: went 时间: 2020-5-17 14:12
生成3.txt- @echo off
- (
- for /f "usebackq tokens=1-3* delims=|" %%i in ("1.txt") do (
- for /f "tokens=3* delims=|" %%a in ('findstr /i /c:"%%i|%%j|%%k|" 2.txt') do (
- echo %%i^|%%j^|%%k^|%%l^%%b
- )
- )
- )>3.txt
- pause&exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |