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

[文本处理] 批处理怎样将两个文本第一列内容相同的行合并成一行?

[复制链接]
发表于 2017-4-19 11:59:19 | 显示全部楼层 |阅读模式
两个文本合并,按照a文本第一列的字符串,获取b文本的字符串 并合并输出
a文本:

101   a   2
102   b   3
103   c   4


b文本:

101   56
103   58
102   59



输出c文本为:

101   a  2   56
102   b  3   59
103   c  4   58
发表于 2017-4-19 12:02:26 | 显示全部楼层
python的pandas干这种事可方便了。
 楼主| 发表于 2017-4-19 22:24:28 | 显示全部楼层
回复 1# hengcp


    用批处理能做的吗
 楼主| 发表于 2017-4-19 22:25:03 | 显示全部楼层
回复 2# codegay


    用批处理能做的吗  麻烦您了
发表于 2017-4-19 22:49:49 | 显示全部楼层
回复 4# hengcp


    做是可以做,但预计会很麻烦
直接上Findstr的话……效率肯定不高
建议用其他语言
发表于 2017-4-19 23:00:38 | 显示全部楼层
看文件大小了 两个FOR循环 效率不会高 另外b文件首列有重复怎么处理
发表于 2017-4-20 08:38:13 | 显示全部楼层

  1. for /f "tokens=1-3 delims= " %%i in (d:a.txt) do (
  2.     set/a n+=1
  3.     call :label "!n!" str
  4.     echo,%%i %%j %%k !str!
  5. )
  6. pause>exit

  7. :label
  8. for /f "tokens=1-2 delims= " %%i in (d:b.txt) do (
  9.     set/a a+=1
  10.     if !a! equ %~1 set "%2=%%j"&goto :eof
  11. )
复制代码
发表于 2017-4-20 16:56:23 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1-3" %%a in (a.txt) do for /f "tokens=2" %%i in ('findstr /b %%a b.txt') do echo;%%a %%b %%c %%i
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
hengcp + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2017-4-25 09:21:18 | 显示全部楼层
回复 8# taofan712


    ok,谢谢了
 楼主| 发表于 2017-5-9 10:31:53 | 显示全部楼层
taofan712 发表于 2017-4-20 16:56



    上面的代码有点小问题,如果 我现在有1011  那他也会把101的给弄出来
 楼主| 发表于 2017-5-17 15:21:07 | 显示全部楼层

两个文件按照主键进行合并的问题

有两个文件:a.txt 和 b.txt
a.txt里头的文本是
192.168.1.1      张三     营运部    总经理
192.168.1.12   李四     业务部    总经理


b.txt里头的文本是

192.168.1.1     1371111111    北京
192.168.1.12   1500500000    山西


使用批处理生成c.txt的格式如下:
192.168.1.1      张三     营运部    总经理    1371111111    北京
192.168.1.12   李四     业务部    总经理     1500500000    山西

请问如何实现  谢谢
发表于 2017-5-17 19:53:57 | 显示全部楼层
回复 11# hengcp
  1. gawk "NR==FNR{a[$1]=$2" "$3}NR>FNR{print $0,a[$1]}" b.txt a.txt > c.txt
复制代码
发表于 2017-5-17 21:59:28 | 显示全部楼层
水一个
  1. setlocal enabledelayedexpansion
  2. if not exist "%~dp1b.txt" exit
  3. for /f "usebackq tokens=1,* delims=         " %%i in ("%~dp0a.txt")do (
  4. set "data=%%i"&&call:1
  5. echo,%%i %%j !backup!
  6. )
  7. pause
  8. goto:eof
  9. :1
  10. set "backup="
  11. for /f "usebackq tokens=1,* delims=         " %%i in ("%~dp0b.txt")do if "%data%"=="%%i" set "backup=%%j"&&goto:eof
  12. goto:eof
复制代码
发表于 2020-12-15 15:47:29 | 显示全部楼层
回复 13# /zhqsystem/zhq


    你好,如果是同一个文本中,有重复的怎么实现呢?

这个:http://www.bathome.net/viewthread.php?tid=57307&extra=
发表于 2020-12-15 19:44:44 | 显示全部楼层
回复 2# codegay

python的代码能发一下吗?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 07:21 , Processed in 0.017666 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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