标题: [文本处理] [已解决]批处理怎样把各列的值进行相减? [打印本页]
作者: 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 可以这样:- gawk "NR>1{print $4-A,$5-B,$6-C,$7-D}{A=$4;B=$5;C=$6;D=$7}" table.txt
复制代码
powershell 可以这样:- $obj = (type table.txt) -replace '\s+',','|convertfrom-csv -Delimiter ","
- for($i=1;$i -lt $obj.length;$i++){
- $j=$i-1;
- ($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 ' '
- }
复制代码
作者: 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 系统自带哦- @echo off&setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- for /f "tokens=1-7" %%a in (a.txt) do (
- if defined a (
- set /a a=%%d-a,b=%%e-b,c=%%f-c,d=%%g-d
- echo %%a%tab%%%b%tab%%%c%tab%!a!%tab%!b!%tab%!c!%tab%!d!
- ) else echo %%a%tab%%%b%tab%%%c%tab%%%d%tab%%%e%tab%%%f%tab%%%g
- set a=%%d&set b=%%e&set c=%%f&set d=%%g
- )
- 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
- @set @n=0; /* & echo off
- cscript -nologo -e:jscript "%~0"<a.txt>b.txt
- pause & exit/b
- */
-
- txt = WScript.StdIn.ReadAll();
- re = /(\S+\s+){3}(\d+\s+){3}\d+\s*$/mg;
- while((ar = re.exec(txt)) != null) {
- if (typeof(B) != "undefined") {
- A = ar[0].split(/\s+/);
- for (i=3; i<7; i++) { B[i] = A[i] - B[i] };
- WScript.Echo(B.join("\t"));
- }
- B = ar[0].split(/\s+/);
- }
复制代码
作者: iq301 时间: 2014-8-26 22:32
不好意思,这些天都在培训,所以现在才来结贴,非常谢谢各位。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |