免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2783 | 回复: 14

[文本处理] awk还是文本处理,对我来说稍微有点难 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-04-20 15:50:45
发表于 2015-07-01 16:51 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-07-01 17:09 |显示全部楼层
回复 1# cwd0204
  1. awk -F, '{getline v<"a";split(v,t,",");if(t[4]==$3 && t[length(t)]!=$NF){print v}}' b
复制代码
这样吗?

最后一列不相等? 没看明白和什么相加。。。

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-04-20 15:50:45
发表于 2015-07-01 17:15 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2015-07-01 17:23 |显示全部楼层
解释的也没看懂说的咋回事

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-07-01 17:32 |显示全部楼层
回复 3# cwd0204


    说实在的, 还没明白还到底要怎么加, 是NF一直累加? 如果相加再置零?

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-04-20 15:50:45
发表于 2015-07-01 17:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-04-20 15:50:45
发表于 2015-07-01 17:37 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
发表于 2015-07-01 18:23 |显示全部楼层
  1. lifayi@vm-test:~/test$ cat test.awk
  2. BEGIN{
  3.         FS=","
  4. }
  5. NR==FNR && $0!~/^$/{
  6.         a[$4][NR]=$0;
  7.         b[$4]+=$(NF-1);
  8.         next;
  9. }
  10. $0!~/^$/{
  11.         c[$3][NR]=$0;
  12.         d[$3]+=$NF;
  13. }
  14. END{
  15.         for(i in b){
  16.                 if(b[i]==d[i]){
  17.                         delete b[i];
  18.                         delete c[i];
  19.                 }else{
  20.                         for(j in a[i])
  21.                                 print a[i][j];
  22.                 }
  23.         }
  24.         for(x in c){
  25.                 for(y in c[x])
  26.                         print c[x][y];
  27.         }
  28. }
复制代码

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
发表于 2015-07-01 20:46 |显示全部楼层
b.txt有问题 第二行和第三行多一个字段回复 1# cwd0204

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-07-01 22:54 |显示全部楼层
本帖最后由 haooooaaa 于 2015-07-01 22:58 编辑

回复 1# cwd0204
  1. def get_list(filename):
  2.     tmp = []
  3.     with open(filename) as f:
  4.         for i in f:
  5.             if i.strip() != "":
  6.                 tmp.append(i.strip())
  7.     return tmp            
  8.                
  9. a, b, c = get_list("a.txt"), get_list("b.txt"), {"a":[],"b":[]}

  10. for i in range(0,len(b)):
  11.     sum = 0
  12.     for j in range(0,len(a)):
  13.         if a[j].count(",")<4 or b[i].count(",")<3:
  14.             continue
  15.         ta, tb = a[j].split(",")[0:-1], b[i].split(",")
  16.         try:
  17.             sum += float(ta[-1])
  18.         except:
  19.             sum = 0
  20.         if j in c["a"] or i in c["b"]:
  21.             continue
  22.         if ta[-3] == tb[-3] and ta[-1] == tb[-1]:
  23.             c["a"].append(j)
  24.             c["b"].append(i)
  25.             break
  26.         elif ta[-3] == tb[-3] and sum == float(tb[-1]):
  27.             c["a"].append(j)
  28.             c["a"].append(j-1)
  29.             c["b"].append(i)
  30.             break
  31.         elif ta[-3] == tb[-3] and float(ta[-1])+float(tb[-1])==0:
  32.             c["a"].append(j)
  33.             c["b"].append(i)
  34.             break

  35. def printN(lists,t):
  36.     for i in range(0,len(lists)):
  37.         if i not in c[t]:
  38.             print lists[i]

  39. printN(a,"a")
  40. printN(b,"b")            
复制代码
你的b文本是有问题, 第二三行,不是第三列了, 上面的脚本是从后面数第三列

结果:
  1. $ python 1.py
  2. COW,WTPA,,10181361761103,2015/4/12,69.00,
  3. COW,WTPA,,10181361763176,2015/4/12,174.00,
  4. COW,WTPA,,10181361763182,2015/4/12,343.00,
  5. COW,WTPA,,10181361763217,2015/4/12,89.00,
  6. COW,WTPA,C02-9622932-3456031,10181361764925,2015/4/11,84.60,
  7. COW,WTPA,,10181361764926,2015/4/11,102.90,
  8. COW,WTPA,C01-7070070-8534411,10181361764929,2015/4/11,170.50,
  9. COW,WTPA,C02-8639078-5566455,10181361764930,2015/4/11,122.10,
  10. COW,WTPA,C01-6480696-6303216,10181361764931,2015/4/11,122.10,
  11. WTPA,FC0-2097184-0554318,10111834512371,2015/4/11,51.80
  12. WTPA,FC0-3239261-4663910,10111834514650,2015/4/11,24.80
  13. WTPA,FC0-1806445-0673518,10111834514840,2015/4/11,122.70
  14. WTPA,FC0-0721387-5015786,10111834514845,2015/4/11,122.00
  15. WTPA,FC0-5187668-7031526,10111834515497,2015/4/11,"1,999.00"
  16. WTPA,FC0-7018338-7828204,10111834515547,2015/4/11,22.50
  17. WTPA,FC0-4186772-2189980,10111834515610,2015/4/11,17.09
  18. WTPA,FC0-6748211-6069642,10111834515669,2015/4/11,339.90
  19. WTPA,FC0-6451409-9195468,10111834515870,2015/4/11,131.22
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP