Board logo

标题: [文本处理] [已解决]批处理如何根据另一个文本重新排序? [打印本页]

作者: 每天几分    时间: 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 编辑
  1. @echo off
  2. rem 文本和批处理全部以ansi编码格式保存
  3. for /f "tokens=1 delims=】【" %%i in ('type 文本2.txt') do (
  4.         set _"%%i"=ture
  5. )
  6. for /f "tokens=1-2 delims=】【" %%a in ('type 文本1.txt') do (
  7.         if defined _"%%b" (
  8.                 echo 【%%a】→【%%b】
  9.         )
  10.         if defined _"%%a" (
  11.                 echo 【%%b】→【%%a】
  12.         )
  13. )>>文本3.txt
  14. pause
复制代码

作者: hlzj88    时间: 2023-1-19 21:57

  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (文本2.txt) do (
  3. 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
  4. )
  5. pause
复制代码

作者: terse    时间: 2023-1-20 05:53

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 保存为ansi编码格式
  3. (for /f "tokens=*" %%a in ('findstr /ig:文本2.txt 文本1.txt') do (
  4.      set "str=%%a"
  5.      for /f "tokens=*" %%b in (文本2.txt) do (
  6.           if not "!str:%%b=!" == "!str!" echo !str:%%b=!%%b
  7.      )
  8. ))>文本3.txt
  9. pause
复制代码

作者: qixiaobin0715    时间: 2023-1-20 10:15

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2 delims=【】" %%i in (1.txt) do (
  4.     set /p str=
  5.     if not "!str!"=="【%%i】" (echo,【%%i】→【%%j】) else echo,【%%j】→【%%i】
  6. ))<2.txt>3.txt
  7. pause
复制代码

作者: hfxiang    时间: 2023-1-20 13:40

确保1.txt及2.txt已保存了ANSI编码格式,下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),执行
  1. 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# 每天几分


    你提问时并没有表达完整,再试试以下脚本:
  1. 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