Board logo

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

作者: filippo009    时间: 2020-12-23 21:06     标题: 求助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-24 10:50

本帖最后由 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
请按任意键继续. . .

作者: filippo009    时间: 2020-12-24 15:20

回复 2# ivor


确实有些看不懂呢,   你太厉害了,
作者: terse    时间: 2020-12-24 20:06

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

作者: filippo009    时间: 2020-12-24 23:20

回复 2# ivor


    数量不对,不是计算两次,而是计算两者之和呢,
作者: ivor    时间: 2020-12-25 09:40

回复 5# filippo009


   已更新




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