Board logo

标题: [文本处理] [已解决]批处理如何将文本第二列内容相同的行第一列的内容进行合并 [打印本页]

作者: mick00034    时间: 2015-10-12 23:13     标题: [已解决]批处理如何将文本第二列内容相同的行第一列的内容进行合并

批处理前:名字后面带数字范围是1~3,批处理后,分类一下。
赵云  1
金一        2
金二        2
黎明        3
王大        3
刘玉  1       

批处理后:如果1=人名有50个的话,可以10行排列(最好可以自定义),不要全部一行排列,那样太长。不同年级的人数有几十或上百,批处理后要显示结果。如一年级多少人,二年级多少人,三年级多少人?不同年级之间有空行分隔

一年级2人:赵云,刘玉。

二年级2人:金一,金二。

三年级2人:黎明,王大。

谢谢大家。
作者: terse    时间: 2015-10-13 00:05

本帖最后由 terse 于 2015-10-13 22:46 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set _1=总经理&set _2=科长&set "_3=职员"
  3. for /f "tokens=1*" %%i in (w.txt) do (
  4.     set /a $%%j+=1,n=$%%j%%10
  5.     set "#%%~nxj=!#%%~nxj! %%i"
  6.     if !n! equ 0 set #%%~nxj=!#%%~nxj!^
  7.               
  8. )
  9. for /l %%i in (1,1,3) do echo !_%%i! !$%%i! 人: !#%%i!
  10. pause
复制代码

作者: wankoilz    时间: 2015-10-13 13:45

本帖最后由 wankoilz 于 2015-10-13 13:47 编辑

练习awk:
  1. #&cls&set/p line=设置单行显示人数:
  2. #&cls&@gawk -v line=%line% -f %0 a.txt>con&pause>nul&exit
  3. {
  4. if(!(++count[$2]%line)){cr="\n"}else{cr=""}
  5.     col[$2]=col[$2]$1" "cr
  6. }
  7. END{
  8.     for(i in col){
  9.         print i"年级"count[i]"人:\n"col[i]"\n"
  10. }
  11. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk
作者: mick00034    时间: 2015-10-13 22:00

本帖最后由 mick00034 于 2015-10-13 22:03 编辑

回复 2# terse
非常感谢,如果想要按照职称级别划分的话,代码可以调整吗,如要得到的结果

总经理2人:赵云 刘玉

科长2人:金一 金二

职员2人:黎明 王大

作者: terse    时间: 2015-10-13 22:47

回复 4# mick00034
2楼 已修改
作者: filippo009    时间: 2020-12-16 08:59

回复 2# terse


   
假设原有 txt 样式(这种情况在同一txt)如下,把第一列相同输出在一行,非常感谢老师 !

ad001|购买1000
ad002|卖出2000
ad003|购买1000
ad004|持平1000
ad005|卖出1500
ad001|卖出1000
ad002|暂无数据

输出结果:

ad001|购买1000 & 卖出1000
ad002|卖出2000 & 暂无数据
ad003|购买1000
ad004|持平1000
ad005|卖出1500
作者: terse    时间: 2020-12-16 12:39

本帖最后由 terse 于 2020-12-16 12:46 编辑

文件小可以
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq tokens=1*delims=|" %%i in ("a.txt") do (
  3.      if not defined _"%%i" (
  4.         set /a n+=1
  5.         set _!n!=%%i
  6.         set "_"%%i"=%%i|%%j"
  7.      ) else  set "_"%%i"=!_"%%i"! & %%j"
  8. )
  9. for /l %%i in (1,1,%n%) do for %%j in ("!_%%i!") do echo;!_"%%~nxj"!
  10. pause
复制代码





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