标题: [其他] 【已解决】BAT:如何合并同类项后,再批量替换 [打印本页]
作者: 思想之翼 时间: 2023-8-31 11:33 标题: 【已解决】BAT:如何合并同类项后,再批量替换
本帖最后由 思想之翼 于 2023-8-31 21:00 编辑
1.txt 记录数据如下,"=" 左侧数据不重复,"=" 右侧字符有重复:
000=书
001=生
002=书
003=生
004=气
2.txt 记录数据,有重复:
书
生
书
生
【问题】
合并 1.txt "=" 右侧的同类项
000 002=书
001 003=生
004=气
然后,批量替换 2.txt 的内容
2.txt 替换后的结果为:
000 002
001 003
000 002
001 003
作者: Batcher 时间: 2023-8-31 12:14
回复 1# 思想之翼
test-1.bat- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims==" %%i in ('findstr /i /g:2.txt 1.txt') do (
- if not defined _%%j (
- set "_%%j=%%i"
- ) else (
- set "_%%j=!_%%j! %%i"
- )
- )
- (for /f "tokens=1-2 delims==" %%i in ('type 1.txt') do (
- echo,!_%%j!
- ))>"2.new.txt"
- endlocal
复制代码
test-2.bat- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims==" %%i in ('findstr /i /g:2.txt 1.txt') do (
- if not defined _%%j (
- set "_%%j=%%i"
- ) else (
- set "_%%j=!_%%j! %%i"
- )
- )
- (for /f "delims=" %%i in ('type 2.txt') do (
- echo,!_%%i!
- ))>"2.new.txt"
- endlocal
复制代码
作者: qixiaobin0715 时间: 2023-8-31 13:19
楼主要求“批量替换 2.txt 的内容”,第2个for中是否应当以2.txt作为替换目标。
作者: 思想之翼 时间: 2023-8-31 13:51
回复 3# qixiaobin0715
是的,感谢关注。
作者: Five66 时间: 2023-8-31 16:03
啊,都不说怎么合并和怎么替换
看了老半天替换结果才看懂(也不知道对不对)
作者: qixiaobin0715 时间: 2023-8-31 16:08
本帖最后由 qixiaobin0715 于 2023-8-31 16:10 编辑
回复 2# Batcher
test-2.bat 12行笔误:!_%%j!——>!_%%i!
作者: hfxiang 时间: 2023-9-1 09:39
回复 1# 思想之翼
1.直接出结果(如有不匹配数据则输出空行):- gawk -F"[ =]+" "NR==FNR{a[$2]=a[$2]?a[$2]\" \"$1:\"\"$1}NR>FNR{print a[$0]}" 1.txt 2.txt>3.txt
复制代码
2.剔除不匹配的数据- gawk -F"[ =]+" "NR==FNR{a[$2]=a[$2]?a[$2]\" \"$1:\"\"$1}NR>FNR{if($0 in a)print a[$0]}" 1.txt 2.txt>3.txt
复制代码
作者: aloha20200628 时间: 2023-9-1 11:43
纯P版还可以更简化一些...- @echo off &setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims==" %%1 in (1.txt) do (
- if defined _%%2 (set "_%%2=!_%%2! %%1") else (set "_%%2=%%1")
- )
- for /f %%F in (2.txt) do if defined _%%F (echo,!_%%F!)
- endlocal &pause &exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |