Board logo

标题: [文本处理] [已解决]批处理怎样把各列的值进行相减? [打印本页]

作者: iq301    时间: 2014-8-16 21:09     标题: [已解决]批处理怎样把各列的值进行相减?

本帖最后由 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
作者: DAIC    时间: 2014-8-16 21:37

你的文本是保存在Excel里面的还是txt文件里面?
作者: CrLf    时间: 2014-8-16 23:05

本帖最后由 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. }
复制代码

作者: iq301    时间: 2014-8-17 02:38

txt文本的, 不可以安装第三方或平台。只能通过系统自带的命令。。
作者: DAIC    时间: 2014-8-17 10:24

回复 4# iq301


    XP还是Win7?
作者: terse    时间: 2014-8-17 17:01

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

作者: CrLf    时间: 2014-8-17 18:34

你们公司这么严吗...
第三方是不用安装的,gawk 就一个 exe,跟脚本扔在一起就行了
作者: CrLf    时间: 2014-8-17 18:35

其实像这种简单的需求,真的还不如用 excel 公式,比脚本简单多了
复杂的倒是适合用脚本
作者: iq301    时间: 2014-8-18 02:15

公司电脑没有权限噶,每天服务器生成的文本数量加起来,你无法想象
- -
作者: apang    时间: 2014-8-18 11:11

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

作者: iq301    时间: 2014-8-26 22:32

不好意思,这些天都在培训,所以现在才来结贴,非常谢谢各位。




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