找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33775|回复: 13

[文本处理] [已解决]批处理如何根据一个文本的第一列内容提取另一文本第一列相同内容对应的行?

[复制链接]
发表于 2016-3-21 07:19:47 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-4 23:18 编辑

如题a.txt内容
attend        vt.出席;照顾,护理
away        ad.离开,远离;⋯去
baby        n.一家中年龄最小的人
back        adv.回(原处);向后
bad        a.坏的,恶的;严重的
bag        n.提包,口袋,书包
.....
b.txt内容
away
back
bag
band
根据b文件的内容提取a文件内容到c.txt为
away        ad.离开,远离;⋯去
back        adv.回(原处);向后
bag        n.提包,口袋,书包
band        n.乐队;带;波段
最好用bat文件处理,谢谢。

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-3-21 09:13:11 | 显示全部楼层
  1. findstr /G:b.txt a.txt>c.txt
复制代码
 楼主| 发表于 2016-3-21 09:58:45 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-12-7 11:42 编辑

回复 2# ivor
够简洁的,看来以后要好好学习了。但还有一点问题,比如需要提取的是after,但是afternoon也一起提取出来了。
若要提取a,所有以a开头的都提取出来了。
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
发表于 2016-3-21 11:01:13 | 显示全部楼层
回复 1# qixiaobin0715
  1. @echo off
  2. (for /f %%a in (b.txt) do (
  3.         findstr /R "\<%%a\>" a.txt
  4. ))>c.txt
复制代码
 楼主| 发表于 2016-3-21 11:38:24 | 显示全部楼层
回复 4# ivor
谢谢了,解决了99%的问题。
还有一种情况:就是如果存在a和a little情况,a和a little分别提取两次,不知好不好解决。
发表于 2016-3-21 11:48:35 | 显示全部楼层
回复 5# qixiaobin0715
加两空格就行
 楼主| 发表于 2016-3-21 11:54:56 | 显示全部楼层
回复 6# happy886rr

请教一下,是在那个地方加空格。
 楼主| 发表于 2016-3-22 22:34:39 | 显示全部楼层
回复 4# ivor
感谢ivor提供的代码。为了能够提取词组比如get up,作了如下修改:
1.for /f后加上了"delims=",保证读取词组,避免以空格分隔,只能读取如get。
2.在/R后增加了/b /c:,只从文件行的开始匹配字符(以免后面的内容产生干扰),并且以整个词组作为字符串提取。
虽然还有瑕疵,但不影响大局。再次感谢ivor的热心帮助。

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 严谨

查看全部评分

发表于 2016-3-22 23:07:14 | 显示全部楼层
回复 5# qixiaobin0715

单词和中文翻译之间的间隔还是蛮大
 楼主| 发表于 2016-3-23 07:15:18 | 显示全部楼层
回复 9# pcl_test
谢谢您及happy886rr的提醒,开始没想到,单词和释义之间有三个空格,在代码/>前增加两个空格,问题完美解决。再次感谢!!!
发表于 2016-3-23 22:21:46 | 显示全部楼层

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (b.txt) do (
  4. set "_%%i=A"
  5. )
  6. (for /f "tokens=1,* delims= " %%i in (a.txt) do (
  7. if defined _%%i echo,%%i %%j
  8. )) >c.txt
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
codegay + 1 谁的小号呢这是.

查看全部评分

 楼主| 发表于 2016-3-23 23:22:41 | 显示全部楼层
回复 11# apython
提供了另一个思路。谢谢了!!!
 楼主| 发表于 2016-4-12 13:46:29 | 显示全部楼层
回复 11# apython
请问:
set "_%%i=A"
表示什么意思?
发表于 2016-4-13 18:09:39 | 显示全部楼层
回复 13# qixiaobin0715


    对其进行赋值,然后在下一句for命令中进行调用。if 判断相关信息是否被赋值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 09:43 , Processed in 0.032206 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表