[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 求助BAT或VBS对有相同的两列进行求和,并按格式输出

请问BAT 或VBS ,对A列和B列同时相同时求和,不相同不计算,假设原有 txt如下;

ax001|1201|50|0.2
ax002|1202|100|0.4
ax003|1203|60|0.1
ax001|1201|30|0.2
ax002|1202|20|0.1


输出到一个新的txt,如下面样式:

ax001|1201|数量:80|0.3
ax002|1202|数量:120|0.5
ax003|1203|数量:60|0.2


非常感谢,可以的可以私聊

本帖最后由 ivor 于 2020-12-25 09:51 编辑

保存为utf-8格式
  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. @(
  3. (GC "a.txt") | select `
  4. @{name='col1'; expression={([regex]::Match($_,'^[a-z0-9]+\|\d+')).value}},
  5. @{name='col2'; expression={([regex]::Match($_,'(?<=\|)[0-9\.]+$')).value}},
  6.     @{name='col3'; expression={([regex]::Match($_,'(\d+)(?=(\|[0-9\.]+$))')).value}}|
  7.     group col1
  8. ) | %{;$_.Name,('数量:'+ ($_.Group |measure -Property col3 -Sum).Sum),($_.Group | measure -Property col2 -Sum).Sum -join '|'}
复制代码
ax001|1201|数量:80|0.4
ax002|1202|数量:120|0.5
ax003|1203|数量:60|0.1
请按任意键继续. . .
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor


确实有些看不懂呢,   你太厉害了,

TOP

  1. gc a.txt | group { $_.split('\|')[0..1] -join "|" }| % {
  2.    $n = $sum = 0;
  3.    $_.Group|%{
  4.       $sum += $_.split('\|')[-1];
  5.       $n += $_.split('\|')[-2];
  6.    }
  7.    $_.name,'数量:'+ $n,$sum  -join '|';
  8. }
复制代码

TOP

回复 2# ivor


    数量不对,不是计算两次,而是计算两者之和呢,

TOP

回复 5# filippo009


   已更新
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

返回列表