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

[文本处理] 【已解决】批处理如何实现文件内容合并?

[复制链接]
发表于 2015-5-6 21:54:08 | 显示全部楼层 |阅读模式
本帖最后由 wangdao6699 于 2015-5-9 05:47 编辑

文本内容:
Cr369,钢在高温时仍具高强度
Ni45,能增加钢的韧性
Mn,增加钢之最大强度及硬度
Cr369,增高钢之淬火温度
36CoTiAl21,极易与氧结合形成氧化铝
Mn,最大强度及硬度
。。。。。。。。。。。
以第一个 ,为分隔符,分成两部分,前部分(英文和数字 组成)相同则合并(以,为隔开),不同则原样输出:
Cr369,钢在高温时仍具高强度,增高钢之淬火温度
Ni45,能增加钢的韧性
Mn,增加钢之最大强度及硬度,最大强度及硬度
36CoTiAl21,极易与氧结合形成氧化铝
。。。。。。。。。。。
发表于 2015-5-6 22:37:18 | 显示全部楼层
  1. gawk -F "," "{a[$1]=a[$1]?a[$1]","$2:$0}END{for(i in a)print a[i]}" 1.txt > 2.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
wangdao6699 + 1 感谢分享

查看全部评分

发表于 2015-5-6 22:37:34 | 显示全部楼层
  1. gawk -F "," "{if(a[$1])a[$1]=a[$1]","$2; else a[$1]=$0}END{for(i in a)print a[i]}" 1.txt > 2.txt
复制代码
发表于 2015-5-6 22:38:04 | 显示全部楼层
如果不区分大小写,可以用BAT这样实现:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=," %%i in ('type "1.txt"') do (
  4.     if not defined _%%i (
  5.         set _%%i=%%i,%%j
  6.     ) else (
  7.         set _%%i=!_%%i!,%%j
  8.     )
  9. )
  10. (for /f "tokens=1* delims==" %%i in ('set _') do (
  11.     echo,%%j
  12. ))>2.txt
  13. endlocal
复制代码
发表于 2015-5-6 22:46:08 | 显示全部楼层
回复 4# gawk
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "useback tokens=1,* delims=," %%i in ("your.txt") do set #%%i=!#%%i!,%%j
  4. (for /f "tokens=1,* delims=#=" %%i in ('set #') do echo %%i%%j)>$New.txt
复制代码
直接这样貌似也可以,
话说用_做前缀不怎么保险,曾经被 _DFX_INSTALL_UNSIGNED_DRIVER 坑过...

评分

参与人数 1技术 +1 收起 理由
wangdao6699 + 1 代码运行有效

查看全部评分

发表于 2015-5-7 07:02:19 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for /f "tokens=1,2* delims=,:" %%a in ('findstr /n . wb.txt') do (
  4.   set n=1
  5.   for /f "tokens=1,2* delims==," %%i in ('set # ^| findstr "%%b"') do (
  6.    set %%i=!%%i!,%%c
  7.    set n=0
  8.    )
  9.   if "!n!"=="1" set #%%a=%%b,%%c
  10.     )
  11. >new.txt (for /f "tokens=1,* delims==" %%i in ('set #') do echo %%j)
复制代码
求教更好的思路
 楼主| 发表于 2015-5-7 07:29:41 | 显示全部楼层
回复 4# gawk


    代码运行将结果进行了排序
 楼主| 发表于 2015-5-7 07:30:02 | 显示全部楼层
回复 5# bailong360


    代码运行将结果进行了排序
 楼主| 发表于 2015-5-7 07:56:27 | 显示全部楼层
回复 6# yangfengoo


    运行窗口出现:环境变量 #  没有定义
 楼主| 发表于 2015-5-7 07:58:25 | 显示全部楼层
回复 6# yangfengoo


    感谢您回复,小写没问题
发表于 2015-5-7 10:20:29 | 显示全部楼层
回复 7# wangdao6699


    是的,利用set命令的特性来实现的代码就是有这个问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:24 , Processed in 0.020006 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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