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

[文本处理] [已解决]批处理怎样把各列的值进行相减?

[复制链接]
发表于 2014-8-16 21:09:36 | 显示全部楼层 |阅读模式
本帖最后由 iq301 于 2014-8-26 22:33 编辑

最近在不断处理非常多的文本,所要的要求都i一样,所以遇到没能力解决的问题,都得在论坛上请教了,

以下的文本,我要把A、B、C、D各列的值进行相减:如A列的第二个值减去A列第一个值,第三个值减去第二个值,依次下去相减,B、C、D都这样做。请指教


Date            Hour       Name              A                       B                                C                        D
8/14/2014        0        ABCD02        107720345        109392125        919715011        920990106
8/14/2014        1        ABCD02        107852093        109524934        920556210        921831784
8/14/2014        2        ABCD02        107984547        109658847        921288932        922564738
8/14/2014        3        ABCD02        108117032        109792471        921963014        923239061
8/14/2014        4        ABCD02        108250845        109927438        922589000        923865201
8/14/2014        5        ABCD02        108384408        110062071        923188315        924464719
8/14/2014        6        ABCD02        108519086        110197742        923854166        925131056
8/14/2014        7        ABCD02        108657902        110338247        924679253        925956963
8/14/2014        8        ABCD02        108803371        110485987        925778191        927056968
8/14/2014        9        ABCD02        108954056        110639097        927076377        928356233
8/14/2014        10        ABCD02        109107449        110795019        928352472        929633328
8/14/2014        11        ABCD02        109261612        110951619        929618215        930900013
8/14/2014        12        ABCD02        109415280        111107856        930874234        932156933
8/14/2014        13        ABCD02        109565084        111260056        932157757        933441421
8/14/2014        14        ABCD02        109717303        111414766        933495177        934780154
8/14/2014        15        ABCD02        109872163        111572582        934847317        936133504
8/14/2014        16        ABCD02        110027046        111730527        936190449        937477980
8/14/2014        17        ABCD02        110177877        111884036        937566416        938855449
8/14/2014        18        ABCD02        110329538        112038313        938995783        940286336
8/14/2014        19        ABCD02        110476014        112187084        940388582        941680607
8/14/2014        20        ABCD02        110615970        112329164        941719539        943012886
8/14/2014        21        ABCD02        110754641        112469863        942974740        944269506
8/14/2014        22        ABCD02        110892255        112609570        944201288        945497481
8/14/2014        23        ABCD02        111028377        112747442        945342172        946639611
发表于 2014-8-16 21:37:49 | 显示全部楼层
你的文本是保存在Excel里面的还是txt文件里面?
发表于 2014-8-16 23:05:17 | 显示全部楼层
本帖最后由 CrLf 于 2014-8-16 23:10 编辑

gawk 可以这样:
  1. gawk "NR>1{print $4-A,$5-B,$6-C,$7-D}{A=$4;B=$5;C=$6;D=$7}" table.txt
复制代码
powershell 可以这样:
  1. $obj = (type table.txt) -replace '\s+',','|convertfrom-csv -Delimiter ","
  2. for($i=1;$i -lt $obj.length;$i++){
  3.     $j=$i-1;
  4.     ($obj[$i].A-$obj[$j].A),($obj[$i].B-$obj[$j].B),($obj[$i].C-$obj[$j].C),($obj[$i].C-$obj[$j].C) -join ' '
  5. }
复制代码
 楼主| 发表于 2014-8-17 02:38:31 | 显示全部楼层
txt文本的, 不可以安装第三方或平台。只能通过系统自带的命令。。
发表于 2014-8-17 10:24:04 | 显示全部楼层
回复 4# iq301


    XP还是Win7?
发表于 2014-8-17 17:01:14 | 显示全部楼层
win7的话 二楼 powershell  系统自带哦
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  3. for /f "tokens=1-7" %%a in (a.txt) do (
  4.     if defined a (
  5.        set /a a=%%d-a,b=%%e-b,c=%%f-c,d=%%g-d
  6.        echo %%a%tab%%%b%tab%%%c%tab%!a!%tab%!b!%tab%!c!%tab%!d!
  7.     ) else echo %%a%tab%%%b%tab%%%c%tab%%%d%tab%%%e%tab%%%f%tab%%%g
  8.     set a=%%d&set b=%%e&set c=%%f&set d=%%g
  9. )
  10. pause
复制代码
发表于 2014-8-17 18:34:29 | 显示全部楼层
你们公司这么严吗...
第三方是不用安装的,gawk 就一个 exe,跟脚本扔在一起就行了
发表于 2014-8-17 18:35:41 | 显示全部楼层
其实像这种简单的需求,真的还不如用 excel 公式,比脚本简单多了
复杂的倒是适合用脚本
 楼主| 发表于 2014-8-18 02:15:22 | 显示全部楼层
公司电脑没有权限噶,每天服务器生成的文本数量加起来,你无法想象
- -
发表于 2014-8-18 11:11:04 | 显示全部楼层
  1. @set @n=0; /* & echo off
  2. cscript -nologo -e:jscript "%~0"<a.txt>b.txt
  3. pause & exit/b
  4. */

  5. txt = WScript.StdIn.ReadAll();
  6. re = /(\S+\s+){3}(\d+\s+){3}\d+\s*$/mg;
  7. while((ar = re.exec(txt)) != null) {
  8.     if (typeof(B) != "undefined") {
  9.         A = ar[0].split(/\s+/);
  10.         for (i=3; i<7; i++) { B[i] = A[i] - B[i] };
  11.         WScript.Echo(B.join("\t"));
  12.     }
  13.     B = ar[0].split(/\s+/);
  14. }
复制代码
 楼主| 发表于 2014-8-26 22:32:56 | 显示全部楼层
不好意思,这些天都在培训,所以现在才来结贴,非常谢谢各位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 04:29 , Processed in 0.031860 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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