Chinaunix

标题: 求这样的一段代码 [打印本页]

作者: 700724    时间: 2005-08-07 10:04
标题: 求这样的一段代码
有一个科目余额文件file1,格式是币种)|(科目代码)|(借方余额)|(贷方余额)具体如下:
人民币|   171|  1982.00|
人民币|   173|    856.22|
欧元  |   888|
美元  |   269|               |     958.26
人民币|   268|               |   1569.98
……
另有一个统计各科目余额的关系文件file2,格式是:(统计代码)=(科目代号)(运算符号)(科目代号)具体如下:
A3486=171+173
A2869=269+268-171
A2968=173+175+179-269……
……
要求以关系文件file2把file1中相应科目的余额按照相应的运算统计出来,再四舍五入至百元,如果file2中提供的科目代码不存在则视为0,上例中应输出为:
A3486=28
A2869=5
A2968=-1
……

先谢了!
作者: 700724    时间: 2005-08-08 07:46
标题: 求这样的一段代码
怎么没有人帮我吗?
作者: waker    时间: 2005-08-08 11:39
标题: 求这样的一段代码
  1. (cat <<\EOF
  2. awk -F '|'  '
  3. {a[$2]=$3-$4}
  4. END{
  5. EOF
  6. sed 's/ //g;s/^/b["/;s/$/]/;s/=/"]=a[/;s/[+-]/]+a[/g' file2
  7. cat <<\EOF

  8. for (i in b) printf("%s=%.0f\n",i,b[i]/100)}' file1
  9. EOF
  10. ) |sh
复制代码

作者: 700724    时间: 2005-08-09 08:49
标题: 求这样的一段代码
大哥,不行啊,我试了,没有报错,可输出的文件统计出来的数全部为0,如下:
A3486=0
A2869=0
A2968=0
……
况且我的file2还存在像这样的行:
KJ0060=
……
应仍然输出:
KJ0060=0
……
老兄帮帮我!
作者: waker    时间: 2005-08-09 09:19
标题: 求这样的一段代码
{a[$2]=$3-$4} 改成
a[$2+0]=$3-$4试试

另外我逻辑上的算法和你的是不同的
我都是用借方余额-贷方余额求的值,关键是给你一个思路,其它的应该自己完成
作者: 700724    时间: 2005-08-09 13:43
标题: 求这样的一段代码
谢这位大哥,我是一个菜鸟,实在看不懂,
我把以上的file1改成只有币种、科目代号、余额这三栏(如下)应该怎么办?
人民币|171|1982.00
人民币|173|856.22
欧元|888|
美元|269|958.26
人民币|268|1569.98
……
请帮帮我!
作者: mocou    时间: 2005-08-09 13:48
标题: 求这样的一段代码
  

你要把你的不一样的格式列出来呀,不要一次挤一点呀,别人只能根据现有的来写
改一下waker的
  1. (cat <<\EOF
  2. awk -F '|'  '
  3. {a[$2]=$3}
  4. END{
  5. EOF
  6. sed 's/ //g;s/^/b["/;s/$/]/;s/=/"]=a[/;s/[+-]/]&a[/g' file2
  7. cat <<\EOF

  8. for (i in b) printf("%s=%.0f\n",i,b[i]/100)}' file1
  9. EOF
  10. ) |sh
复制代码

作者: 700724    时间: 2005-08-09 14:03
标题: 求这样的一段代码
好吧!
有一个科目余额文件file1,格式是(币种)|(科目代码)|(科目余额)如下:
人民币|171|1982.00
人民币|173|856.22
欧元|888|
美元|269|958.26
人民币|268|1569.98
……
另有一个统计各科目余额的关系文件file2,格式是:(统计代码)=(科目代号)(运算符号)(科目代号)具体如下:
A3486=171+173
A2869=269+268-171
A3696=
A2968=173+175+179-269……
……
要求以关系文件file2把file1中相应科目的余额按照相应的运算统计出来,再四舍五入至百元,如果file2中提供的科目代码不存在则视为0,如:
A3486=28
A2869=5
A3696=0
A2968=-1
……
不知我说清楚没有?
作者: 700724    时间: 2005-08-09 14:04
标题: 求这样的一段代码
好吧!
有一个科目余额文件file1,格式是(币种)|(科目代码)|(科目余额)如下:
人民币|171|1982.00
人民币|173|856.22
欧元|888|
美元|269|958.26
人民币|268|1569.98
……
另有一个统计各科目余额的关系文件file2,格式是:(统计代码)=(科目代号)(运算符号)(科目代号)具体如下:
A3486=171+173
A2869=269+268-171
A3696=
A2968=173+175+179-269……
……
要求以关系文件file2把file1中相应科目的余额按照相应的运算统计出来,再四舍五入至百元,如果file2中提供的科目代码不存在则视为0,输出的file3如:
A3486=28
A2869=5
A3696=0
A2968=-1
……
不知我说清楚没有?
作者: mocou    时间: 2005-08-09 14:21
标题: 求这样的一段代码
(cat <<\EOF
awk -F '|'  '
{a[$2]=$3}
END{
EOF
#sed这一行加一个s/a\[\]/0/,将无值的直接变成0
sed 's/ //g;s/^/b["/;s/$/]/;s/=/"]=a[/;s/[+-]/]&a[/g;s/a\[\]/0/' file2
cat <<\EOF

for (i in b) printf("%s=%.0f\n",i,b/100)}' file1
EOF
)|sh
#结果如下
A2968=-1
A3696=0
A3486=28
A2869=5

作者: 700724    时间: 2005-08-09 15:25
标题: 求这样的一段代码
大哥,我这样怎么输出的结果是附加在file1数据之后,虽然再加一句:grep '=' file3 >file4能实现,但有没有更好的办法直接将结果输出为file3呢?
(cat <<\EOF
awk -F '|'  '
{a[$2]=$3}
END{
EOF
#sed这一行加一个s/a\[\]/0/,将无值的直接变成0
sed 's/ //g;s/^/b["/;s/$/]/;s/=/"]=a[/;s/[+-]/]&a[/g;s/a\[\]/0/' file2
cat <<\EOF

for (i in b) printf("%s=%.0f\n",i,b/100)}' file1
EOF
)|sh >file3
作者: 700724    时间: 2005-08-09 16:36
标题: 求这样的一段代码
难道不行?为什么?/




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2