免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sunlizhourong
打印 上一主题 下一主题

一个awk过滤文本的脚本 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-08-10 10:30 |只看该作者
回复 6# jason680


    我觉得$3不能简单的相加吧,如果文本里有
  1. 11 3052230          2
  2. 11 3052230          3
复制代码
这种数据,结果就会变成
  1. 11 3052230          5
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2011-08-10 10:35 |只看该作者
可以两次遍历

  1. awk 'NR==FNR&&NF==3{a[$1,$2]++}NR!=FNR&&NF==3&&(a[$1,$2]==1||$3!=0){print >"1.txt"}' 1.txt 1.txt
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2011-08-10 10:39 |只看该作者

  1. $ cat 1.txt
  2. 10 2841312          0
  3. 10 2843969          0
  4. 10 3546080          0
  5. 10 3052191          0
  6. 10 3052191         85
  7. 10 3052230          0
  8. 10 3052230          3
  9. 10 3052210          0
  10. 11 2843969          0
  11. 11 3546080          0
  12. 11 3052191          0
  13. 11 3052191         85
  14. 11 3052230          0
  15. 11 3052230          3
  16. 11 3052210          0
  17. $ awk 'NR==FNR&&NF==3{a[$1,$2]++}NR!=FNR&&NF==3&&(a[$1,$2]==1||$3!=0){print >"1.txt"}' 1.txt 1.txt
  18. $ cat 1.txt
  19. 10 2841312          0
  20. 10 2843969          0
  21. 10 3546080          0
  22. 10 3052191         85
  23. 10 3052230          3
  24. 10 3052210          0
  25. 11 2843969          0
  26. 11 3546080          0
  27. 11 3052191         85
  28. 11 3052230          3
  29. 11 3052210          0
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
14 [报告]
发表于 2011-08-10 11:15 |只看该作者
回复  jason680


    我觉得$3不能简单的相加吧,如果文本里有这种数据,结果就会变成
where27 发表于 2011-08-10 10:30



那是3,还是2

基本上楼主,已经排除这样的状况....

要不然,你说说是3还是2!!??

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
15 [报告]
发表于 2011-08-10 11:22 |只看该作者
回复  sunlizhourong
where27 发表于 2011-08-10 10:27



乱序了,不一定是lz要的...

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
16 [报告]
发表于 2011-08-10 11:22 |只看该作者
本帖最后由 xinglu1983 于 2011-08-10 11:24 编辑
  1. awk -vi=1 '{a[$1" "$2]++;b[$1" "$2" "$3]=$0;c[i++]=$1" "$2" "$3}a[$1" "$2]>1{delete b[$1" "$2" "0]}END{for(i=1;i<=length(c);i++){if(b[c[i]]!="")print b[c[i]]}}' 1.txt
复制代码

论坛徽章:
0
17 [报告]
发表于 2011-08-10 11:27 |只看该作者
回复 15# jason680


    嗯,要看楼主的需求了

论坛徽章:
0
18 [报告]
发表于 2011-08-10 14:38 |只看该作者
  1. ywlscpl@ubuntu:~$ awk 'NR==FNR{a[$1","$2]++;next}$3==0&&a[$1","$2]>1{next}1' file file                                 
  2. 10 2841312          0
  3. 10 2843969          0
  4. 10 3546080          0
  5. 10 3052191         85
  6. 10 3052230          3
  7. 10 3052210          0
  8. 11 2843969          0
  9. 11 3546080          0
  10. 11 3052191         85
  11. 11 3052230          3
  12. 11 3052210          0
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
19 [报告]
发表于 2011-08-10 14:55 |只看该作者
按照你的描述
awk '!a[$1""$2]++ && $3!=0'
但我就纳闷了,你到底什么标准来去掉重复的呢?

论坛徽章:
0
20 [报告]
发表于 2011-08-10 15:02 |只看该作者
本帖最后由 ywlscpl 于 2011-08-10 15:06 编辑
按照你的描述
awk '!a[$1""$2]++ && $3!=0'
但我就纳闷了,你到底什么标准来去掉重复的呢?
expert1 发表于 2011-08-10 14:55



$1 $2不重复的行不处理   
$1 $2重复的这些行中,把$3==0的行去掉即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP