免费注册 查看新帖 |

Chinaunix

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

求助,如何用awk处理这个文本!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-27 11:14 |只看该作者 |倒序浏览
a,85%
,20%
b,40%
c,87%
,85%

a、b、c各为一组(包括下面紧邻的首列为空的行),当每组第二列都大于80时,打印该组非空首列。

要求结果:不打印a,因为第二行小于80%
               不打印b,因为第三行小于80%
          打印c,因为四五行均大于80%

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2005-06-27 11:31 |只看该作者

求助,如何用awk处理这个文本!!

b,40% 这一行下面有没有
,xx%这样的行?

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

求助,如何用awk处理这个文本!!

都有可能

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

求助,如何用awk处理这个文本!!

#cat a.tmp
a,85%
,20%
b,40%
c,87%
,85%
e,20%
,90%
f,90%
,20%
g,90%
,90%

#awk -F, '{if($1=="" && $2>=80 && b>=80) print a;a=$1;b=$2}' a.tmp

结果:
c
g

不知道这是否满足您的条件?

论坛徽章:
0
5 [报告]
发表于 2005-06-27 11:39 |只看该作者

求助,如何用awk处理这个文本!!

awk -F"," '/^,/{a=$2}NR==(NR-1){print,$a}'>tmp
awk -F",%" '{if ($2>80||$3>80)print$1,$2}  tmp
我是想把首字为,的都粘到上一行,在判断每行的2,3列是否都大于80,然后打印1,2列,具体语法请再查。
waker,我的方法行吗?

论坛徽章:
0
6 [报告]
发表于 2005-06-27 11:43 |只看该作者

求助,如何用awk处理这个文本!!

小.小 按我的需求,a.tmp 中除了b,40% 外都应该打印

论坛徽章:
0
7 [报告]
发表于 2005-06-27 11:44 |只看该作者

求助,如何用awk处理这个文本!!

小.小     你的不对,你再看看。
a,c,g你怎么打印的?

论坛徽章:
0
8 [报告]
发表于 2005-06-27 11:54 |只看该作者

求助,如何用awk处理这个文本!!

结果
c
g

如果有单独一行且$2>=80的,需要打印$1吗?
假设有一行m,99%
但下一行$1为空,那么要打印这行吗?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2005-06-27 12:11 |只看该作者

求助,如何用awk处理这个文本!!

[quote]原帖由 "gsr12416"]小.小 按我的需求,a.tmp 中除了b,40% 外都应该打印[/quote 发表:


看不懂  

论坛徽章:
0
10 [报告]
发表于 2005-06-27 13:05 |只看该作者

求助,如何用awk处理这个文本!!

简单点,把有字母的行和下面没字母的行合并起来。
然后做个判断就行了。
awk -F, '{if ($0==""print $0 else printf $0}'
awk -F, '( $2>80 || $3 > 80 ){print $1}'

自己试试看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP