藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教一個按規律合併兩個文件的SH

請教一個合併兩個文件的SH,謝謝
如下有這兩個文件a.txt和b.txt
$cat a.txt
現業
0310  100.00
清水
0310  200.00
建業
0310  400.00

$cat b.txt
                網點餘額月報表
日期    現業    清水   太平    建業    合計   

想生成如下的c.txt,將對應的金額倒入,並在最後一列合計。
               網點餘額表
日期    現業      清水     太平    建業    合計
0310    100.00   200.00           400.00  700.00

每天a.txt內容都有變化,金額和網點都有增減,b.txt內容固定為所有網點名,現要按a.txt和b.txt對應
的網點名字在c.txt中排列,如果a.txt中的沒有b.txt對應的網點名,那麼在c.txt中就不能有相應的金額。
請教這個SH該如何寫啊
  -->

請教一個按規律合併兩個文件的SH

#usage:awk -f test.awk b.txt a.txt
#filename:test.awk
BEGIN {
         n=0
         str=""
}

FILENAME=="b\.txt" {
        if(NR==2) {
                for(i=2;i<NF;i++)
                        branchlist[i-1]=$i
                n=NF-2
        }
       
        next
}

{
        if(NF==1)
                str=$1
        else if(NF==2){               
                datelist[$1]=""
                datalist[str "," $1]=$2
                str=""
        }
}

END{       
        printf("%30s\n","網點餘額月報表")
       
        str=sprintf("%-8s","日期")
        for(i=1;i<=n;i++)
                str=str sprintf("%-8s",branchlist[i])
        str=str sprintf("%8s","合計")
        printf("%s\n",str)
       
        for(dateitem in datelist){
                total=0
                str=sprintf("%-8s",dateitem)
                for(i=1;i<=n;i++){                       
                        dataitem=branchlist[i] "," dateitem
                        if( dataitem in datalist)
                                count=datalist[dataitem]
                        else
                                count=0.00
                               
                        total+=count
                        str=str sprintf("%-8.2f",count)
                }       
                str=str sprintf("%8.2f",total)
               
                printf("%s\n",str)
        }
}

請教一個按規律合併兩個文件的SH

太感謝了,過2天上班就去測試一下,希望能用,呵呵,太好了



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com