Board logo

标题: [文本处理] 长度相同的文件合并的批处理问题 [打印本页]

作者: netdzb    时间: 2021-4-12 10:16     标题: 长度相同的文件合并的批处理问题

文本1

91B2C9E1
5800520c
69f4cd8f
42040a49


文本2


05000100
00896443
0A000000
06000000

希望得到的结果是

91B2C9E1 05000100
5800520c 00896443
69f4cd8f 0A000000
42040a49 06000000

中间的分隔符是空格。

我记得以前有个类似的需求,代码大概是这样写的,有些关键的地方我忘记了。希望坛里的大牛补全一下,谢谢!
  1. for /f "delims=" %%x in ('1.txt') do (
  2.        echo %%x
  3. )<2.txt
  4. pause
复制代码

作者: newswan    时间: 2021-4-12 10:27

linux 命令
  1. paste -d ' ' a.txt b.txt c.txt
复制代码

作者: netdzb    时间: 2021-4-12 10:29

回复 2# newswan

这个我是知道的,我想用批处理写,原来有个类似的帖子,我一直找不到了。
作者: netdzb    时间: 2021-4-12 10:47

回复 2# newswan

你知道批处理如何echo一个回车吗?
echo "回车“>test.txt应该怎么写?
作者: newswan    时间: 2021-4-12 10:53

  1. >>1.txt echo,
复制代码

作者: 路过    时间: 2021-4-12 11:28

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >new.txt (
  4.     for /f "delims=" %%a in (1.txt) do (
  5.         set /p q=%%a
  6.         echo;!q!
  7.     )
  8. )<2.txt
  9. start new.txt
  10. pause
  11. exit
复制代码

作者: qixiaobin0715    时间: 2021-4-12 11:39

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

作者: xp3000    时间: 2021-4-12 11:46

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%A in (A.txt)do (set /a a+=1,b=0
  3.    for /f "delims=" %%B in (B.txt)do (set /a b+=1
  4.    if !a!==!b! echo %%A %%B>>New.txt)
  5. )
复制代码
这类文章有很多,这种一看就清楚
作者: newswan    时间: 2021-4-13 00:10

学习了,可以 < 给 for 语句传递 行
  1. (
  2.     for  %%a in (*) do (
  3.         set /p a=
  4.     )
  5. )<1.txt
复制代码

作者: xczxczxcz    时间: 2021-4-14 10:15

本帖最后由 xczxczxcz 于 2021-4-14 10:21 编辑

回复 8# xp3000

若a  b 文本各为1万行,那执行次数为:10000 ⅹ 10000;若对b文本每次用more来去掉某些行,应该更快。
作者: qixiaobin0715    时间: 2021-4-14 11:24

像这样前个文本每取一行,后个文本取所有行的循环,总是效率不高。下面代码好像效率也不高:
  1. @echo off
  2. findstr /n ".*" 文本2.txt>文本2.temp
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in (文本1.txt) do (
  5.     set /a m+=1
  6.     for /f "tokens=1* delims=:" %%b in ('findstr /b "!m!:" 文本2.temp') do (
  7.         echo,%%a %%c
  8.     )
  9. )
  10. del 文本2.temp
  11. pause
复制代码

作者: Batcher    时间: 2021-4-14 11:31

回复 11# qixiaobin0715


    findstr耗时比较高
作者: qixiaobin0715    时间: 2021-4-14 11:33

回复 12# Batcher
嗯嗯
作者: newswan    时间: 2021-4-14 23:09

把一个文件,每一行保存在一个变量中,不知道 变量的数量,变量的最大长度 限制是多少
或者用数组
作者: newswan    时间: 2021-4-14 23:12

做个测试,比较一下各方案
作者: xp3000    时间: 2021-4-15 08:27

回复 15# newswan
不用比较了,看文章就知道我那个效率不高,
大文本用EmEditor写脚本,先将文本分1000份然后并行处理最后合并非常快,
这种方式在内存完成,不会一次次写入硬盘造成损耗




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