免费注册 查看新帖 |

Chinaunix

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

一句很蛋疼的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-25 17:41 |只看该作者 |倒序浏览
有一个文本描述数据文件(用于持久化),格式如下

%Section1
i(key1 value1, key2 value 2, ...很多很多)
%Section2
i(key1 val1, key2 val2, ...很多很多)
...
...

怎么写个shell脚本,获取Section2中 key小于100的所以key value对,输出格式:  key1 val1, key2 val2
写了个很蛋疼的脚本:

result="`sed -n '/\%Section2/{n;p;}' $datafile | awk -F '[()]' '{print $2}' | awk -F ',' '{for(i=1;i<=NF;i++) {split($i,a," ");if(a[1]<100) lv[a[1]]=a[2]}} END {ORS=","; for(n in lv) print n, lv[n]}'`"

有没有简洁点的?

论坛徽章:
0
2 [报告]
发表于 2011-02-25 18:42 |只看该作者
  1. sed -n '/\%Section2/{n;p;}' $datafile | awk '{sub(/i\(/,"",$0);sub(/\)/,"",$0);split($0,arr,",");}END{for(i in arr){split(arr[i],line," ");if(line[2]<100)print line[1]","line[2];}}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-02-25 21:57 |只看该作者
sed -n '/\%Section2/{n;p;}' $datafile | awk -F '[()]' '{print $2}' |tr "," "\n" |awk '$1<100 {print;} |tr "\n" ","

论坛徽章:
0
4 [报告]
发表于 2011-02-25 22:32 |只看该作者
本帖最后由 ywlscpl 于 2011-02-25 22:33 编辑

回复 1# daly88
  1. awk -F '[),(]' '/%Section2/{getline;for (i=2;i<NF;i++) {split($i,m," +");if (m[2]<100) printf $i","}print "";exit}' file
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-02-26 07:05 |只看该作者
本帖最后由 yinyuemi 于 2011-02-26 07:13 编辑
  1. awk -v RS=", |i\\\(|\n|)" '/%Section/{p=$1}$1~/^[0-9]/&& $1<100 && p=="%Section2"{output?output=output", "$0:output=$0}END{print output}'  $datafile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP