免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk和sed打印最长最短字符串 [复制链接]

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-04-12 23:59 |只看该作者 |倒序浏览
本帖最后由 baby_神 于 2017-04-13 00:05 编辑

源文件
  1. cat a
  2. 1
  3. 22
  4. 333
  5. 4444
  6. 555556
  7. 66666
复制代码


需求用awk或sed打印最长最短字符串

awk
最短
  1. awk '{a[NR]=$0}END{asort(a,b);print b[1]}' a
  2. awk -F '' 'NF<(a?a:NF+1){a=NF;b=$0}END{print b}' a
复制代码

最长
  1. awk '{a[NR]=$0}END{c=asort(a,b);print b[c]}' a
  2. awk -F '' 'NF>a{a=NF;b=$0}END{print b}'
复制代码


sed
最短
  1. sed -nr '1h;1!H;g;:a;/^\n/bc;/\n$/bb;s/^([^\n])(.*)\n([^\n])(.*)/\2\n\4/;ta;:b;g;s/.*\n//;be;:c;g;s/\n.*//;be;:e;h;${g;p}' a
复制代码

最长
  1. sed -nr 'H;g;:a;/^\n/bb;/\n$/bc;s/^([^\n])(.*)\n([^\n])(.*)/\2\n\4/;ta;:b;g;s/.*\n//;be;:c;g;s/\n.*//;be;:e;h;${g;p}' a
复制代码


论坛徽章:
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
2 [报告]
发表于 2017-04-13 06:55 |只看该作者
本帖最后由 jason680 于 2017-04-13 07:05 编辑

回复 1# baby_神

$ awk '{len=length}NR==1{min=max=len;mins=maxs=$0}{if(min>len){min=len;mins=$0};if(max<len){max=len;maxs=$0}}END{printf("min=%s(len=%d),max=%s(len=%d)\n",mins,min,maxs,max)}' FILE
min=1(len=1),max=555556(len=6)

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2017-04-13 09:11 |只看该作者
回复 1# baby_神

要是最短和最长都不止一行,(比如,最短长度是1,但有N行长度都是1), 要怎么输出?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
4 [报告]
发表于 2017-04-15 10:26 |只看该作者
回复 3# 关阴月飞

暂不考虑这种情况。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP