标题: [文本处理] [已解决]批处理如何根据另一个文本重新排序? [打印本页]
作者: 每天几分 时间: 2023-1-19 20:24 标题: [已解决]批处理如何根据另一个文本重新排序?
文本1【】内的2组词语,有的是前对后错,有的是后对前错。
文本2的词语,都是正确的词语。
请问批处理如何根据文本2,对文本1的词的前后位置重新排序,实现文本3的效果,前错后对。
文本1存在但文本2不存在的词就不用提出来了。
文本1
【好像】【好象】
【服最】【服罪】
【叫作】【叫做】
【宁缺毋滥】【宁缺勿滥】
【所做所为】【所作所为】
文本2
文本3
【好象】→【好像】
【服最】→【服罪】
【宁缺勿滥】→【宁缺毋滥】
【所做所为】→【所作所为】
多谢楼下各位,但不知为啥,只有2楼的结果是正确的。
作者: 77七 时间: 2023-1-19 21:11
本帖最后由 77七 于 2023-1-19 21:13 编辑
- @echo off
- rem 文本和批处理全部以ansi编码格式保存
- for /f "tokens=1 delims=】【" %%i in ('type 文本2.txt') do (
- set _"%%i"=ture
- )
- for /f "tokens=1-2 delims=】【" %%a in ('type 文本1.txt') do (
- if defined _"%%b" (
- echo 【%%a】→【%%b】
- )
- if defined _"%%a" (
- echo 【%%b】→【%%a】
- )
- )>>文本3.txt
- pause
复制代码
作者: hlzj88 时间: 2023-1-19 21:57
- @echo off&&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (文本2.txt) do (
- for /f "delims=" %%m in (文本1.txt) do echo %%m|findstr /i "%%i"&&set "ww=%%m"&&set ww=!ww:%%i=!&&echo !ww!→%%i>>文本3.txt
- )
- pause
复制代码
作者: terse 时间: 2023-1-20 05:53
- @echo off&setlocal enabledelayedexpansion
- rem 保存为ansi编码格式
- (for /f "tokens=*" %%a in ('findstr /ig:文本2.txt 文本1.txt') do (
- set "str=%%a"
- for /f "tokens=*" %%b in (文本2.txt) do (
- if not "!str:%%b=!" == "!str!" echo !str:%%b=!%%b
- )
- ))>文本3.txt
- pause
复制代码
作者: qixiaobin0715 时间: 2023-1-20 10:15
- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1,2 delims=【】" %%i in (1.txt) do (
- set /p str=
- if not "!str!"=="【%%i】" (echo,【%%i】→【%%j】) else echo,【%%j】→【%%i】
- ))<2.txt>3.txt
- pause
复制代码
作者: hfxiang 时间: 2023-1-20 13:40
确保1.txt及2.txt已保存了ANSI编码格式,下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),执行- gawk -F"[【】]+" "NR==FNR{A[$0];next}{((\"【\"$2\"】\")in A)?($0=\"【\"$3\"】→【\"$2\"】\"):($0=\"【\"$2\"】→【\"$3\"】\")}1" 2.txt 1.txt>3.txt
复制代码
作者: 每天几分 时间: 2023-1-20 16:40
回复 6# hfxiang
我知道问题所在了,为何只有1楼是正确的。
因为有的词文本2不存在,只有文本1存在。所以文本2不存在的词就不用提出来了。不然出来的排序是错的。
作者: hfxiang 时间: 2023-1-20 17:52
回复 7# 每天几分
你提问时并没有表达完整,再试试以下脚本:- gawk -F"[【】]+" "NR==FNR{A[$0];next}{if((\"【\"$2\"】\")in A){$0=\"【\"$3\"】→【\"$2\"】\"} else {$0=\"【\"$2\"】→【\"$3\"】\"}}1" 2.txt 1.txt>3.1.txt
复制代码
作者: 每天几分 时间: 2023-1-20 18:25
本帖最后由 每天几分 于 2023-1-20 18:27 编辑
回复 8# hfxiang
1楼已经重新给出例子了,你这个提取出来的文本还是不对。。。
作者: hlzj88 时间: 2023-1-20 22:29
回复 9# 每天几分
我写的在win7系统测试过的,你的系统下不能正确显示结果吗
作者: terse 时间: 2023-1-20 22:36
回复 9# 每天几分
4楼的不满足? 输出加→这个的话 第六行这样:echo !str:%%b=!→%%b
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |