- 论坛徽章:
- 0
|
单句awk处理。每次处理输出本次的购货款,更新原文件状态。
- awk -v n=100 'NR==1{print > FILENAME".bak";next}n>$4{n=n-$4;$NF=$4;$4="0"}n<=$4{$NF=n;$4=$4-n;n="0"}{print > FILENAME".bak";s=s+$3*($NF)}END{printf("%0.2f\n",s); system("mv "FILENAME".bak "FILENAME)}' URFILE
复制代码
可以处理任意情况(为显示清楚每次处理手动加空行):
- [root]# cat aa
- 铅笔批次 原始铅笔数量 单价 剩余铅笔数量 本次取出数量
- 1 150 0.6 150 0
- 2 150 0.7 150 0
- 3 100 0.5 100 0
- 4 10 0.6 10 0
- 5 100 0.7 100 0
- 6 120 0.55 120 0
- [root]# awk -v n=280 'NR==1{print > FILENAME".bak";next}n>$4{n=n-$4;$NF=$4;$4="0"}n<=$4{$NF=n;$4=$4-n;n="0"}{print > FILENAME".bak";s=s+$3*($NF)}END{printf("%0.2f\n",s); system("mv "FILENAME".bak "FILENAME)}' aa
- 181.00
- [root]# cat aa
- 铅笔批次 原始铅笔数量 单价 剩余铅笔数量 本次取出数量
- 1 150 0.6 0 150
- 2 150 0.7 20 130
- 3 100 0.5 100 0
- 4 10 0.6 10 0
- 5 100 0.7 100 0
- 6 120 0.55 120 0
- [root]# awk -v n=280 'NR==1{print > FILENAME".bak";next}n>$4{n=n-$4;$NF=$4;$4="0"}n<=$4{$NF=n;$4=$4-n;n="0"}{print > FILENAME".bak";s=s+$3*($NF)}END{printf("%0.2f\n",s); system("mv "FILENAME".bak "FILENAME)}' aa
- 167.50
- [root]# cat aa
- 铅笔批次 原始铅笔数量 单价 剩余铅笔数量 本次取出数量
- 1 150 0.6 0 0
- 2 150 0.7 0 20
- 3 100 0.5 0 100
- 4 10 0.6 0 10
- 5 100 0.7 0 100
- 6 120 0.55 70 50
- [root]# awk -v n=280 'NR==1{print > FILENAME".bak";next}n>$4{n=n-$4;$NF=$4;$4="0"}n<=$4{$NF=n;$4=$4-n;n="0"}{print > FILENAME".bak";s=s+$3*($NF)}END{printf("%0.2f\n",s); system("mv "FILENAME".bak "FILENAME)}' aa
- 38.50
- [root]# cat aa
- 铅笔批次 原始铅笔数量 单价 剩余铅笔数量 本次取出数量
- 1 150 0.6 0 0
- 2 150 0.7 0 0
- 3 100 0.5 0 0
- 4 10 0.6 0 0
- 5 100 0.7 0 0
- 6 120 0.55 0 70
- [root]# awk -v n=280 'NR==1{print > FILENAME".bak";next}n>$4{n=n-$4;$NF=$4;$4="0"}n<=$4{$NF=n;$4=$4-n;n="0"}{print > FILENAME".bak";s=s+$3*($NF)}END{printf("%0.2f\n",s); system("mv "FILENAME".bak "FILENAME)}' aa
- 0.00
- [root]# cat aa
- 铅笔批次 原始铅笔数量 单价 剩余铅笔数量 本次取出数量
- 1 150 0.6 0 0
- 2 150 0.7 0 0
- 3 100 0.5 0 0
- 4 10 0.6 0 0
- 5 100 0.7 0 0
- 6 120 0.55 0 0
复制代码
[ 本帖最后由 kwokcn 于 2009-5-20 18:52 编辑 ] |
|