免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1894 | 回复: 16
打印 上一主题 下一主题

数据筛选与排列? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-07 10:09 |只看该作者 |倒序浏览
cat a1
1000              0.00
184              0.00
18401              0.00
185              0.00
18501              0.00
186              4.53
18601              0.00
18602              0.00
18603              4.53
18604              0.00
18605              0.00
188              0.00
18801              0.00
18802              0.00
189              0.00
18901              0.00
18902              0.00
2000        6372785.73
3000              0.00
4000        1264542.93
5000        7637328.66
6000        7637328.66
目的文件:
将184-189(连同子科目xxx01,xxx02.....),2000,4000,6000的余额排列在2列借方,1000,3000,5000的余额排列在3列贷方,第一列为科目号。我awk '{if ($1>=184&&$1<=189) print $1,$2}' a1结果把子科目丢了?

论坛徽章:
0
2 [报告]
发表于 2005-01-07 10:57 |只看该作者

数据筛选与排列?

最好能给出目标文件样例

论坛徽章:
0
3 [报告]
发表于 2005-01-07 11:06 |只看该作者

数据筛选与排列?

目标文件:
科目    借     贷
1000   0.00   0.00
184     0.00   0.00
18401 0.00   0.00
185     0.00   0.00
18501 0.00   0.00
186     4.53   0.00
18601  0.00  0.00
18602 0.00   0.00
18603 4.53   0.00
18604 0.00   0.00
18605 0.00   0.00
188     0.00   0.00
18801 0.00   0.00
18802 0.00   0.00
189     0.00   0.00
18901 0.00   0.00
18902 0.00   0.00
2000 6372785.73 0.00
3000   0.00   0.00
4000 1264542.93  0.00
5000   0.00   7637328.66
6000  7637328.66  0.00

论坛徽章:
0
4 [报告]
发表于 2005-01-07 11:27 |只看该作者

数据筛选与排列?

投机的办法:只处理科目为1000、3000、5000的纪录。
而且我看你的文件已经是排好序的了,所以只给出处理输出的部分

  1. [kennyyu@haha zz]$ more model.file
  2. 1000 0.00
  3. 184 0.00
  4. 18401 0.00
  5. 185 0.00
  6. 18501 0.00
  7. 186 4.53
  8. 18601 0.00
  9. 18602 0.00
  10. 18603 4.53
  11. 18604 0.00
  12. 18605 0.00
  13. 188 0.00
  14. 18801 0.00
  15. 18802 0.00
  16. 189 0.00
  17. 18901 0.00
  18. 18902 0.00
  19. 2000 6372785.73
  20. 3000 0.00
  21. 4000 1264542.93
  22. 5000 7637328.66
  23. 6000 7637328.66
复制代码
  1. [kennyyu@haha zz]$ awk '{if ($1=="1000"||$1=="3000"||$1=="5000") print $1,"0.00",$2;else print $1,$2,"0.00"}' model.file
  2. 1000 0.00 0.00
  3. 184 0.00 0.00
  4. 18401 0.00 0.00
  5. 185 0.00 0.00
  6. 18501 0.00 0.00
  7. 186 4.53 0.00
  8. 18601 0.00 0.00
  9. 18602 0.00 0.00
  10. 18603 4.53 0.00
  11. 18604 0.00 0.00
  12. 18605 0.00 0.00
  13. 188 0.00 0.00
  14. 18801 0.00 0.00
  15. 18802 0.00 0.00
  16. 189 0.00 0.00
  17. 18901 0.00 0.00
  18. 18902 0.00 0.00
  19. 2000 6372785.73 0.00
  20. 3000 0.00 0.00
  21. 4000 1264542.93 0.00
  22. 5000 0.00 7637328.66
  23. 6000 7637328.66 0.00
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-01-07 11:52 |只看该作者

数据筛选与排列?

给一个sed的

  1. [kennyyu@haha zz]$ sed "s/.*/& 0.00/g;s/\(^[1|3|5]000\) \(.*\) \(.*\)/\1 \3 \2/g" model.file
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-01-07 12:42 |只看该作者

数据筛选与排列?

to :guangzongy精灵王
我是举例子,实际189以前还有101-149的余额在贷方在第3列,1000,3000,5000的余额排列在3列贷方,将184-189(连同子科目xxx01,xxx02.....),2000,4000,6000的余额排列在2列借方,第一列为科目号,所以必须进行借贷的分列

论坛徽章:
0
7 [报告]
发表于 2005-01-07 13:51 |只看该作者

数据筛选与排列?

不好意思,做如下修改好了
  1. [kennyyu@haha zz]$ awk '{if ($1=="2000"||$1=="4000"||$1=="6000"||$1~/18[4-9]/) print $1,$2,"0.00";else print $1,"0.00",$2}' model.file
复制代码


最好还是给出你需要处理的文件,要不估计又有一些规则没有满足了

论坛徽章:
0
8 [报告]
发表于 2005-01-07 14:35 |只看该作者

数据筛选与排列?

我想知道$1~/18[4-9]/ 中符号的意思,||的意思?
我试了一下[kennyyu@downsize zz]$ awk '{if ($1=="2000"||$1=="4000"||$1=="6000"||$1~/18[4-9]/) print $1,$2,"0.00";else print $1,"0.00",$2}' model.file
不行呀?
184-189的余额还是在第3列,而不是2列???

论坛徽章:
0
9 [报告]
发表于 2005-01-07 15:28 |只看该作者

数据筛选与排列?

“$1”是第一个域的内容
“~/……/”是进行RE匹配
“18[4-9]”表示前面连个数字是18,第三个数字在集合(4,5,6,7,8,9)中
“||”是OR
建议看看wingger关于awk的介绍
http://bbs.chinaunix.net/forum/v ... 2&show_type=new

论坛徽章:
0
10 [报告]
发表于 2005-01-07 15:38 |只看该作者

数据筛选与排列?

这是我机子上的运行结果,可以的呀!

  1. [kennyyu@haha z]$ awk '{if ($1=="2000"||$1=="4000"||$1=="6000"||$1~/18[4-9]/) print $1,$2,"0.00";else print $1,"0.00",$2}' model.file
  2. 1000 0.00 0.00
  3. 141 0.00 5.55
  4. 184 0.00 0.00
  5. 18401 0.00 0.00
  6. 185 0.00 0.00
  7. 18501 0.00 0.00
  8. 186 4.53 0.00
  9. 18601 0.00 0.00
  10. 18602 0.00 0.00
  11. 18603 4.53 0.00
  12. 18604 0.00 0.00
  13. 18605 0.00 0.00
  14. 188 0.00 0.00
  15. 18801 0.00 0.00
  16. 18802 0.00 0.00
  17. 189 0.00 0.00
  18. 18901 0.00 0.00
  19. 18902 0.00 0.00
  20. 2000 6372785.73 0.00
  21. 3000 0.00 0.00
  22. 4000 1264542.93 0.00
  23. 5000 0.00 7637328.66
  24. 6000 7637328.66 0.00
复制代码

你把你的运行结果贴出来!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP