|
藍森林 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天上班就去測試一下,希望能用,呵呵,太好了 |
| |