中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 文本合并计算 上一主题 | 下一主题
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『楼 主』:  文本合并计算

text1.txt

  Quote:
15600_20080525_01.p106_prt
15601        6        贷        -4341.00
15602        2        借        20245.00
15604        8        贷        -30310.00
15605        1        贷        -3000.00
15606        1        借        20.00
15607        3        贷        -2700.00
15608        1        贷        -20000.00
15609        9        借        57650.24
15610        4        借        68859.00
15611        1        贷        -780.00
15612        4        借        15540.00
15613        2        贷        -3895.00
15615        7        贷        -25560.00
15617        1        借        500.00
合计        50        借        72228.24

15601_20080525_prt
15600        4        贷        -91000.00
15602        4        贷        -65150.00
15604        5        借        4970.00
15605        2        借        7340.00
15606        2        借        1000.00
15607        2        借        900.00
15608        1        借        690.00
15609        1        借        970.00
15611        4        借        6800.00
15612        2        借        73500.00
15613        1        借        500.00
15615        3        借        2190.00
15616        1        贷        -105.00
合计        32        贷        -57395.00

text2.txt

  Quote:
15600_20080526_01.p106_prt
15601        9        借        44114.00
15604        25        贷        -295670.00
15605        2        借        303000.00
15606        2        贷        -10000.00
15607        1        借        45000.00
15608        2        借        10320.00
15609        2        借        526.00
15610        4        贷        -44560.00
15611        1        贷        -2300.00
15612        5        贷        -3250.00
15613        1        贷        -3003.00
15615        4        借        31800.00
15616        6        借        40990.00
合计        64        借        116967.00

15601_20080526_01.1a1_prt
15600        3        借        22900.00
15602        2        贷        -8000.00
15604        19        借        33560.00
15605        5        借        9053.00
15606        5        借        30247.03
15607        8        借        62750.00
15608        1        借        450.00
15609        3        贷        -390.00
15610        5        借        15600.00
15611        3        借        6400.00
15612        1        借        840.00
15613        2        借        28400.00
15615        3        贷        -48200.00
合计        60        借        153610.03

如何将text1.txt和text2.txt相同项目合并加总
得到
机构        笔数        借贷        金额
15600_prt
15601        15        借        39773
合计          *         *          *
......
......

注:
15601        6        贷        -4341.00
15601        9        借        44114.00
6+9=15
44114-4341=39773

注意:
15601
15602
...
15606
字段1数字可能不连续!!!


我把结果讲的不清楚!
是每月统计本机构代理其他机构的业务量
共16个机构
想得到:

  Quote:
1. 15600_200805
15601 * * *
15602 * * *
15604 * * *
15605 * * *
......
15617 * * *

2. 15601_200805
15600 * * *
15602 * * *
15604 * * *
15605 * * *
......
15617 * * *

3. 15602_200805
......
......

中间没有15603和15614


[ Last edited by xycoordinate on 2008-5-29 at 02:12 PM ]

2008-5-28 18:24
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

意思没有表达清楚:合并之后,借贷字段是写“借”还是“贷”呢?根据什么来判断?

这样的问题用 awk 来解决最适合不过了。

2008-5-28 20:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

正数是借……负是贷……

个人觉得有点像体力活=。=



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-5-28 21:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

不知道这样如何?

  Quote:
# gawk --posix "$1~/^[0-9]+$/{rec[$1]+=$NF;num[$1]+=$2;sum+=$NF;} END{printf(\"机构      笔数      借贷      金额\n\");for(t in rec){printf(\"%-10s%-10d%-10s%-10d\n\",t,num[t],rec[t]>0?\"借\":\"贷\",rec[t]);}}" text1.txt text2.txt
机构      笔数      借贷      金额
15613     6         借        22002
15604     57        贷        -287450
15605     10        借        316393
15615     17        贷        -39770
15606     10        借        21267
15616     7         借        40885
15607     14        借        105950
15617     1         借        500
15608     5         贷        -8540
15609     15        借        58756
15600     7         贷        -68100
15610     13        借        39899
15601     15        借        39773
15611     9         借        10120
15602     8         贷        -52905
15612     12        借        86630



   此帖被 +2 点积分      点击查看详情   
评分人:【 xycoordinate 分数: +2  时间:2009-4-3 06:41


2008-5-28 21:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 5 楼』:  



  Quote:
正数是借……负是贷……

是这个意思!

要用awk???
不想倒到UNIX上去!!!



lxmxn斑竹:

有2个问题
A.机构没有排序
B.没有合计

[ Last edited by xycoordinate on 2008-5-28 at 10:03 PM ]

2008-5-28 21:31
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

有windows版的呀



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-5-28 21:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

下载个Windows版的吧

UnxUtils
http://upload.cn-dos.net/img/377.zip



2008-5-28 22:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


echo.机构      笔数      借贷      金额&&gawk --posix "$1~/^[0-9]+$/{rec[$1]+=$NF;num[$1]+=$2;sum+=$NF;} END{for(t in rec){printf(\"%-10s%-10d%-10.2s%-10.2f\n\",t,num[t],rec[t]>0?\"借\":\"贷\",rec[t]);tnum+=num[t];trec+=rec[t]} ;printf(\"合计:    %-10d%-10s%-10.2f\",tnum,trec>0?\"借\":\"贷\",trec)}" text1.txt text2.txt | sort
[ Last edited by lxmxn on 2008-5-28 at 11:19 PM ]

2008-5-28 23:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 9 楼』:  我日花了我两个小时写这个:


@echo off&setlocal enabledelayedexpansion
echo 机构        笔数        借贷        金额
for /l %%i in (15600,1,15617) do call :lp %%i
echo 合计        !bi!        !借贷!        !num!.00
pause>nul&goto :eof
:lp
for /f "tokens=1,2,3,4 delims= " %%i in (1.txt) do (
    if %%i equ %1 (
       set str1=%%i&set a=%%l&set a=!a:-=!&set a=!a:~,-3!
       if "%%k" equ "贷" (
          set /a str2+=%%j,str4-=!a!,bi+=%%j,num-=!a!
          ) else (
          set /a str2+=%%j,str4+=!a!,bi+=%%j,num+=!a!
       )
       if !str4! leq 0 (
          set str3=货
          ) else (
          set str3=借
       )
    )
)
if defined str1 echo !str1!        !str2!        !str3!        !str4!.00
set str1=&set str2=0&set str3=&set str4=0       

注:echo 第一个字符串后的空格实际都是tab(按下tab键),而论坛处理不了tab
(只做空格处理),所以请楼主自己将复制后的代码中的空格改回tab!

1.txt:
15600_20080525_01.p106_prt
15601        6        贷        -4341.00
15602        2        借        20245.00
15604        8        贷        -30310.00
15605        1        贷        -3000.00
15606        1        借        20.00
15607        3        贷        -2700.00
15608        1        贷        -20000.00
15609        9        借        57650.24
15610        4        借        68859.00
15611        1        贷        -780.00
15612        4        借        15540.00
15613        2        贷        -3895.00
15615        7        贷        -25560.00
15617        1        借        500.00
合计        50        借        72228.24

15601_20080525_prt
15600        4        贷        -91000.00
15602        4        贷        -65150.00
15604        5        借        4970.00
15605        2        借        7340.00
15606        2        借        1000.00
15607        2        借        900.00
15608        1        借        690.00
15609        1        借        970.00
15611        4        借        6800.00
15612        2        借        73500.00
15613        1        借        500.00
15615        3        借        2190.00
15616        1        贷        -105.00
合计        32        贷        -57395.00
15600_20080526_01.p106_prt
15601        9        借        44114.00
15604        25        贷        -295670.00
15605        2        借        303000.00
15606        2        贷        -10000.00
15607        1        借        45000.00
15608        2        借        10320.00
15609        2        借        526.00
15610        4        贷        -44560.00
15611        1        贷        -2300.00
15612        5        贷        -3250.00
15613        1        贷        -3003.00
15615        4        借        31800.00
15616        6        借        40990.00
合计        64        借        116967.00

15601_20080526_01.1a1_prt
15600        3        借        22900.00
15602        2        贷        -8000.00
15604        19        借        33560.00
15605        5        借        9053.00
15606        5        借        30247.03
15607        8        借        62750.00
15608        1        借        450.00
15609        3        贷        -390.00
15610        5        借        15600.00
15611        3        借        6400.00
15612        1        借        840.00
15613        2        借        28400.00
15615        3        贷        -48200.00
合计        60        借        153610.03
附运行后的结果:
机构    笔数    借贷    金额
15600   7       货      -68100.00
15601   15      借      39773.00
15602   8       货      -52905.00
15604   57      货      -287450.00
15605   10      借      316393.00
15606   10      借      21267.00
15607   14      借      105950.00
15608   5       货      -8540.00
15609   15      借      58756.00
15610   13      借      39899.00
15611   9       借      10120.00
15612   12      借      86630.00
15613   6       借      22002.00
15615   17      货      -39770.00
15616   7       借      40885.00
15617   1       借      500.00
合计    206             285410.00
[ Last edited by zw19750516 on 2008-5-28 at 11:47 PM ]



批处理之家新域名:www.bathome.net
2008-5-28 23:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

也来一个,没计算后面的小数。
看楼上几位好像都没计算小数?
:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-4 delims= " %%a in (text1.txt text2.txt) do (
   if not "%%d"=="" (
      if not "%%a"=="合计" set "max=%%d"&set /a _%%a+=!max:~0,-3!,.%%a+=%%b
))
for /f "tokens=1,2 delims=.=" %%a in ('set .') do (
   if !_%%a! lss 0 (set n=贷) else set n=借
      set "m=%%b    "&set /a str1+=%%b,str2+=!_%%a!
          echo %%a  !m:~0,3! !n!  !_%%a!
)
if !str2! lss 0 (set n=贷) else set n=借
echo.&echo 合计: !str1!  !n! !str2!
pause>nul




致精致简!
2008-5-29 01:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  

如果有Perl的环境可以试试这个:

  Quote:
[root@xunizhuji dos]#  perl -anle '
if($F[0]=~/^\d+$/){
    hash->{$F[0]}->{"tot"}+=$F[3];
    hash->{$F[0]}->{"rec"}+=$F[1];
}
END{
    print "机构      笔数      借贷      金额";
    foreach(sort keys %hash){
        hash->{"tot"}+=hash->{$_}->{"tot"};
        hash->{"rec"}+=hash->{$_}->{"rec"};
        printf("%-10s%-10d%-10s%-10.2f\n",$_,hash->{$_}->{"rec"},hash->{$_}->{"tot"}>0?"借":"贷",hash->{$_}->{"tot"})
    }
    printf("总计      %-10d%-10s%-10.2f\n",hash->{"rec"},hash->{"tot"}>0?"借":"贷",hash->{"tot"});
}'
text1.txt  text2.txt

机构      笔数      借贷      金额
15600     7         贷        -68100.00
15601     15        借        39773.00
15602     8         贷        -52905.00
15604     57        贷        -287450.00
15605     10        借        316393.00
15606     10        借        21267.03
15607     14        借        105950.00
15608     5         贷        -8540.00
15609     15        借        58756.24
15610     13        借        39899.00
15611     9         借        10120.00
15612     12        借        86630.00
15613     6         借        22002.00
15615     17        贷        -39770.00
15616     7         借        40885.00
15617     1         借        500.00
总计      206       借        285410.27
[root@xunizhuji dos]#

[ Last edited by lxmxn on 2008-5-29 at 02:05 AM ]

2008-5-29 02:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  

计算这个小数还真麻烦,到头来自己都不知道是怎么算的了。结果倒好像对了。
@echo off&setlocal enabledelayedexpansion
echo 机构  笔数 借贷 金额
echo.
for /f "tokens=1-5 delims=. " %%a in (a.txt b.txt) do (
   if not "%%d"=="" (
      if not "%%a"=="合计" (
         set "max=%%d"&set /a _%%avar+=1,_%%anum+=1%%e
         set /a _%%a+=max,.%%a+=%%b,hj+=1%%e,k+=1
)))
set /a k*=100,hj-=k
set hjw=!hj:~-2,2!&set "hj=!hj:~0,-2!"
if not defined hj set /a hj=0
for /f "tokens=1,2 delims=.=" %%a in ('set .') do (
   set x=!_%%anum:~-2,2!
   set /a _%%avar*=100,_%%anum-=_%%avar
   set z=!_%%anum:~0,-2!
   if not defined z set /a z=0
   if !_%%a! lss 0 (set n=贷) else set n=借
      set "m=%%b    "&set /a str1+=%%b,str2+=!_%%a!,_%%a+=z
      echo %%a  !m:~0,3! !n!  !_%%a!.!x!
      set z=&set x=
)
if !str2! lss 0 (set n=贷) else set n=借
set /a str2+=hj
echo.&echo 合计: !str1!  !n!  !str2!.!hjw!
pause>nul




致精致简!
2008-5-29 03:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 13 楼』:  

感谢大家的热心帮助!

我得好好学习学习!!!

消化

2008-5-29 08:18
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 14 楼』:  

test.bat

  Quote:
echo.机构      笔数      借贷      金额&&gawk --posix "$1~/^[0-9]+$/{rec[$1]+=$NF;num[$1]+=$2;sum+=$NF;} END{for(t in rec){printf(\"%-10s%-10d%-10.2s%-10.2f\n\",t,num[t],rec[t]>0?\"借\":\"贷\",rec[t]);tnum+=num[t];trec+=rec[t]} ;printf(\"合计:    %-10d%-10s%-10.2f\",tnum,trec>0?\"借\":\"贷\",trec)}" text1.txt text2.txt | sort

难道只能在CMD下执行,不能写成BAT吗?

E:\bdttdb>test.bat
机构      笔数      借贷      金额
gawk: cmd. line:1: $1~/^[0-9]+$/{rec[$1]+=$NF;num[$1]+=$2;sum+=$NF;} END{for(t i
n rec){printf("-10d-10.2f\n",t,num[t],rec[t]>0?"借":"贷",rec[t]);tnum+=num[t];tr
ec+=rec[t]} ;printf("合计:    -10s"贷",trec)}
gawk: cmd. line:1:

                                    ^ invalid char '? in expression

2008-5-29 09:01
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
radem
高级用户

CMD感染者


积分 691
发帖 383
注册 2008-5-23
状态 离线
『第 15 楼』:  

这里的氛围真好!
努力学习.....

2008-5-29 11:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: