Board logo

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

作者: hengcp    时间: 2017-4-19 11:59     标题: 批处理怎样将两个文本第一列内容相同的行合并成一行?

两个文本合并,按照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
作者: codegay    时间: 2017-4-19 12:02

python的pandas干这种事可方便了。
作者: hengcp    时间: 2017-4-19 22:24

回复 1# hengcp


    用批处理能做的吗
作者: hengcp    时间: 2017-4-19 22:25

回复 2# codegay


    用批处理能做的吗  麻烦您了
作者: 老刘1号    时间: 2017-4-19 22:49

回复 4# hengcp


    做是可以做,但预计会很麻烦
直接上Findstr的话……效率肯定不高
建议用其他语言
作者: terse    时间: 2017-4-19 23:00

看文件大小了 两个FOR循环 效率不会高 另外b文件首列有重复怎么处理
作者: apython    时间: 2017-4-20 08:38

  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. )
复制代码

作者: taofan712    时间: 2017-4-20 16:56

  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
复制代码

作者: hengcp    时间: 2017-4-25 09:21

回复 8# taofan712


    ok,谢谢了
作者: hengcp    时间: 2017-5-9 10:31

taofan712 发表于 2017-4-20 16:56



    上面的代码有点小问题,如果 我现在有1011  那他也会把101的给弄出来
作者: hengcp    时间: 2017-5-17 15:21     标题: 两个文件按照主键进行合并的问题

有两个文件: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    山西

请问如何实现  谢谢
作者: Batcher    时间: 2017-5-17 19:53

回复 11# hengcp
  1. gawk "NR==FNR{a[$1]=$2\" \"$3}NR>FNR{print $0,a[$1]}" b.txt a.txt > c.txt
复制代码

作者: /zhqsystem/zhq    时间: 2017-5-17 21:59

水一个
  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
复制代码

作者: filippo009    时间: 2020-12-15 15:47

回复 13# /zhqsystem/zhq


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

这个:http://www.bathome.net/viewthread.php?tid=57307&extra=
作者: netdzb    时间: 2020-12-15 19:44

回复 2# codegay

python的代码能发一下吗?谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2