免费注册 查看新帖 |

Chinaunix

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

[文本处理] pwu --awk [复制链接]

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-15 03:24 |显示全部楼层
本帖最后由 1cpuer 于 2018-06-15 09:35 编辑
  1. # [ /home/soio/1bs/awks ] {2018-06-15 09:27:01}
  2. : 1529026021:0;➜  awk -F'#' '{a[$0]=$0}END{as=asorti(a,b);for (i=1;i<=as;i++)print a[b[i]]}' 1.wu   
  3. & 06~$#2
  4. & 13~$#2!+-0@
  5. & 13~$#@r!==v w
  6. & 24~$#@r!==v== w
  7. & 34~$#@r!w
  8. & 42~$#2!+-
  9. & 47~$#2!+-
  10. & 53~$#2!+-0@
  11. & 73~$#2
  12. & 82~$#2!+-0@n
  13. & 88~$#2!+-0u
  14. & 96~$#2!+-0H


  15. # [ /home/soio/1bs/awks ] {2018-06-15 09:27:10}
  16. : 1529026030:0;➜  awk -F'#' '{a[$2]=$2}END{as=asorti(a,b);for (i=1;i<=as;i++)print a[b[i]]}' 1.wu
  17. 2
  18. 2!+-
  19. 2!+-0@
  20. 2!+-0@n
  21. 2!+-0H
  22. 2!+-0u
  23. @r!==v w
  24. @r!==v== w
  25. @r!w


  26. # [ /home/soio/1bs/awks ] {2018-06-15 09:27:18}
  27. : 1529026038:0;➜  awk -F'#' '{a[$2]=$0}END{as=asorti(a,b);for (i=1;i<=as;i++)print a[b[i]]}' 1.wu
  28. & 73~$#2
  29. & 47~$#2!+-
  30. & 53~$#2!+-0@
  31. & 82~$#2!+-0@n
  32. & 96~$#2!+-0H
  33. & 88~$#2!+-0u
  34. & 13~$#@r!==v w
  35. & 24~$#@r!==v== w
  36. & 34~$#@r!w


  37. 如何排序成➜  sort -t"#" -k2 1.wu
复制代码

# [ /home/soio/1bs/awks ] {2018-06-15 03:15:58}
: 1529003758:0;➜  sort -t"#" -k2 1.wu
& 06~$#2
& 73~$#2
& 42~$#2!+-
& 47~$#2!+-
& 13~$#2!+-0@
& 53~$#2!+-0@
& 96~$#2!+-0H
& 82~$#2!+-0@n
& 88~$#2!+-0u
& 24~$#@r!==v== w
& 13~$#@r!==v w
& 34~$#@r!w


# [ /home/soio/1bs/awks ] {2018-06-15 03:16:54}
: 1529003814:0;➜  cat 1.wu
& 06~$#2
& 42~$#2!+-
& 47~$#2!+-
& 73~$#2
& 88~$#2!+-0u
& 96~$#2!+-0H
& 82~$#2!+-0@n
& 13~$#2!+-0@
& 53~$#2!+-0@
& 13~$#@r!==v w
& 24~$#@r!==v== w
& 34~$#@r!w

awk -F'#' '{asort $2}'

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-06-15 11:01 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-15 12:31 编辑

貌似没辙,awk认为 空格 比 = 大,而sort 认为 空格 比 = 小把最后一行 & 34~$#@r!w 在w之前再+空格
改为:& 34~$#@r! w
这样看的清楚点,试了下python 也认为 空格 比 = 大,so,sort命令理解不深,不过感觉也没必要理解那么深。。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2018-06-15 14:09 |显示全部楼层

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-15 15:37 |显示全部楼层
回复 3# yinyuemi

awk -F'#' '{a[$2,NR]=$0}END{PROCINFO["sorted_in"]="@ind_str_asc";for(i in b){print a}}' 1.wu
@...... #试过了无

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-06-15 16:53 |显示全部楼层
回复 4# 1cpuer

不同的工具、语言中的排序算法是有差别的,建议按实际需求选择解决方案

论坛徽章:
766
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2018-06-15 18:18 |显示全部楼层
自己实现了一个排序大小比较

  1. awk 'function cmp(k1,k2){if(k1=="" && k2=="") return 0; if(ord[substr(k1,1,1)]>ord[substr(k2,1,1)]) return 2; else if(ord[substr(k1,1,1)]<ord[substr(k2,1,1)]) return 1; else return  cmp(substr(k1,2),substr(k2,2))} BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n} {a[NR]=$0} END{for(i=1;i<=NR;i++)for(j=1;j<=NR-i;j++){split(a[j],b1,"#");split(a[j+1],b2,"#");if(cmp(b1[2],b2[2])==2){temp=a[j];a[j]=a[j+1];a[j+1]=temp}};for(i=1;i<=NR;i++)print a[i]}' 1.wu
  2. & 06~$#2
  3. & 73~$#2
  4. & 42~$#2!+-
  5. & 47~$#2!+-
  6. & 13~$#2!+-0@
  7. & 53~$#2!+-0@
  8. & 82~$#2!+-0@n
  9. & 96~$#2!+-0H
  10. & 88~$#2!+-0u
  11. & 13~$#@r!==v w
  12. & 24~$#@r!==v== w
  13. & 34~$#@r!w
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2018-06-15 18:42 |显示全部楼层
回复 4# 1cpuer

你还需要array of array,配合sorted

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-06-15 19:34 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-15 19:35 编辑

回复 6# Herowinter

佬哥,他要的是这个结果:sort -t"#" -k2 1.wu
& 06~$#2
& 73~$#2
& 42~$#2!+-
& 47~$#2!+-
& 13~$#2!+-0@
& 53~$#2!+-0@
& 96~$#2!+-0H
& 82~$#2!+-0@n
& 88~$#2!+-0u
& 24~$#@r!==v== w
& 13~$#@r!==v w

& 34~$#@r!w


而且是要通过排序获得这个结果

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-15 20:17 |显示全部楼层
回复 8# christmas1102

#类似也算 ;想要测试结果是 #2 一组 ,#@ 一组 。

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-15 20:20 |显示全部楼层
本帖最后由 1cpuer 于 2018-06-16 07:15 编辑

回复 6# Herowinter

简化一点那就更理想了

awk 'function cmp(k1,k2)            
{if(k1=="" && k2=="") return 0;      
if(ord[substr(k1,1,1)]>ord[substr(k2,1,1)]) return 2;
else                                
if(ord[substr(k1,1,1)]<ord[substr(k2,1,1)]) return 1;
else return  cmp(substr(k1,2),substr(k2,2))}         
BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}      
{a[NR]=$0} END{for(i=1;i<=NR;i++)for(j=1;j<=NR-i;j++)
{split(a[j],b1,"#");split(a[j+1],b2,"#");
if(cmp(b1[2],b2[2])==2)              
{temp=a[j];a[j]=a[j+1];a[j+1]=temp}};
for(i=1;i<=NR;i++)print a}' 1.wu  

其实是非常金典的代码,substr() ; split() ; 举个例子 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP