忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: rtzd

[文本处理] 精准换行并排序 [复制链接]

论坛徽章:
0
发表于 2018-06-09 14:30 |显示全部楼层
回复 10# christmas1102



对不起,上面两位

对不起


是我的错。刚更新系统。忘了环境变量了

不好意思

论坛徽章:
0
发表于 2018-06-09 14:46 |显示全部楼层
回复 2# 1cpuer


不好意思。道歉


但,不知道何因,grep前增加一个e,就好用,输出正确。不增加不能用,输出是零


谢谢,谢谢!

论坛徽章:
0
发表于 2018-06-09 14:50 |显示全部楼层
回复 5# christmas1102



谢谢,谢谢。完美解决



论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:4215-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之北京
日期:2018-03-23 15:24:07CU十四周年纪念徽章
日期:2018-03-16 13:09:532016科比退役纪念章
日期:2018-01-19 12:45:5915-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:48
发表于 2018-06-11 14:56 |显示全部楼层
本帖最后由 wh7211 于 2018-06-11 15:02 编辑

回复 1# rtzd


另:如果将其最终结果按照从小到大顺序,再排序一下,更完美
  1. grep -Po '1[0-9]{6}' file|sort -n
  2. awk 'function p(){if(match($0,"(1[0-9]{6})",a)){b[++i]=a[1];sub("1[0-9]{6}","");p()}}{p()}END{d=asort(b,c);for(j=1;j<=d;j++){print c[j]}}' file
复制代码

<<<awk4.0+
  1. awk 'function p(){if(match($0,"(1[0-9]{6})",a)){b[++i]=a[1];sub("1[0-9]{6}","");p()}}{p()}END{PROCINFO["sorted_in"]="@val_num_asc";for(j in b){print b[j]}}' file
复制代码

输出:
  1. 1300281
  2. 1301811
  3. 1303770
  4. 1303771
  5. 1303772
  6. 1303773
  7. 1306013
  8. 1308439
  9. 1308836
  10. 1309281
  11. 1309455
  12. 1309456
  13. 1309603
  14. 1309609
  15. 1309624
  16. 1310812
  17. 1318371
  18. 1319494
  19. 1319838
  20. 1319839
  21. 1319848
  22. 1319860
  23. 1319861
  24. 1320820
  25. 1354762
  26. 1354763
  27. 1354764
  28. 1354820
  29. 1354821
  30. 1355090
  31. 1355091
  32. 1355092
  33. 1459248
  34. 1459249
  35. 1478127
  36. 1478128
  37. 1478129
  38. 1508236
  39. 1508237
  40. 1508238
  41. 1804843
  42. 1806491
  43. 1808077
  44. 1808078
  45. 1808079
  46. 1808170
  47. 1808171
  48. 1808172
  49. 1893231
  50. 1898035
  51. 1898230
  52. 1898232
  53. 1898233
  54. 1898234
  55. 1898235
  56. 1898236
  57. 1898237
  58. 1898238
  59. 1898239
  60. 1980812
  61. 1990801
  62. 1990802
复制代码

论坛徽章:
0
发表于 2018-06-11 18:22 |显示全部楼层
回复 14# wh7211



谢谢


实践中,数据里面出现了这样的情况,用代码运行,分组后的数字字符串不正确

  1. 18430581843059184306018430611843062184306318430641843065
  2. 18430661843067184306818430691845510184551118455121845513
  3. 18455141845515184551618455171845518184551918456501845651
  4. 18456521845653184565418456551845656184565718456581845659
  5. 8456801845681184568218456831845684184568518456861845687
  6. 18456881845689184569018456911845692184569318456941845695
  7. 18456961845697184569818456991849040184904118490421849043
  8. 18490441849045184904618490471849048184904918490501849051
  9. 18499601849961184996218499631849964184996518499661849967
  10. 18499681849969185055118505601850565185056718505691855501
  11. 18555111855515185554018555411855542185555018555511855568
  12. 18555691855634185563518556361855637185563818556391855650
  13. 18556511855652185565318556541855655185565618556571860551
  14. 18605651860965186541018654111865412186541318654141865415
  15. 18654161865417186541818654191865505186551018655111865512
复制代码


上面输出应该是这样才正确:
  1. 1843058
  2. 1843059
  3. 1843060
  4. 1843061
  5. 1843062
  6. 1843063
  7. 1843064
  8. 1843065
  9. 1843066
  10. 1843067
  11. 1843068
  12. 1843069
  13. 1845510
  14. 1845511
  15. 1845512
  16. 1845513
  17. 1845514
  18. 1845515
  19. 1845516
  20. 1845517
  21. 1845518
  22. 1845519
  23. 1845650
  24. 1845651
  25. 1845652
  26. 1845653
  27. 1845654
  28. 1845655
  29. 1845656
  30. 1845657
  31. 1845658
  32. 1845659
  33. 845680      *这一行最理想的是空行,以备将来检查错误时用。
  34. 1845681
  35. 1845682
  36. 1845683
  37. 1845684
  38. 1845685
  39. 1845686
  40. 1845687
  41. 1845688
  42. 1845689
  43. 1845690
  44. 1845691
  45. 1845692
  46. 1845693
  47. 1845694
  48. 1845695
  49. 1845696
  50. 1845697
  51. 1845698
  52. 1845699
  53. 1849040
  54. 1849041
  55. 1849042
  56. 1849043
  57. 1849044
  58. 1849045
  59. 1849046
  60. 1849047
  61. 1849048
  62. 1849049
  63. 1849050
  64. 1849051
  65. 1849960
  66. 1849961
  67. 1849962
  68. 1849963
  69. 1849964
  70. 1849965
  71. 1849966
  72. 1849967
  73. 1849968
  74. 1849969
  75. 1850551
  76. 1850560
  77. 1850565
  78. 1850567
  79. 1850569
  80. 1855501
  81. 1855511
  82. 1855515
  83. 1855540
  84. 1855541
  85. 1855542
  86. 1855550
  87. 1855551
  88. 1855568
  89. 1855569
  90. 1855634
  91. 1855635
  92. 1855636
  93. 1855637
  94. 1855638
  95. 1855639
  96. 1855650
  97. 1855651
  98. 1855652
  99. 1855653
  100. 1855654
  101. 1855655
  102. 1855656
  103. 1855657
  104. 1860551
  105. 1860565
  106. 1860965
  107. 1865410
  108. 1865411
  109. 1865412
  110. 1865413
  111. 1865414
  112. 1865415
  113. 1865416
  114. 1865417
  115. 1865418
  116. 1865419
  117. 1865505
  118. 1865510
  119. 1865511
  120. 1865512
复制代码






论坛徽章:
0
发表于 2018-06-11 18:35 |显示全部楼层
回复 14# wh7211


你的代码厉害!



论坛徽章:
0
发表于 2018-06-11 18:52 |显示全部楼层
回复 14# wh7211



这个太生硬。没法检查删除掉的。

LANG=C  grep -Po '1[0-9]{6}' file|sort -n

比如:

186541g
865412
186541b

检查出来后,将来手动修正

只是来说说而已




论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:4215-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之北京
日期:2018-03-23 15:24:07CU十四周年纪念徽章
日期:2018-03-16 13:09:532016科比退役纪念章
日期:2018-01-19 12:45:5915-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:48
发表于 2018-06-12 09:09 |显示全部楼层
回复 15# rtzd


实践中,数据里面出现了这样的情况,用代码运行,分组后的数字字符串不正确
845680      *这一行最理想的是空行,以备将来检查错误时用。

代码可以根据需求调整,比如你在15楼描述的这个需求就是“保持字符串原有顺序并为错误检查留出空行”
  1. awk 'function p(){if(match($0,"(1[0-9]{6})",a)){if(sub("^([^1]+)","")){printf("\n")};sub("1[0-9]{6}","");print a[1];p()}}{p()}' file
复制代码

输出:
  1. 1843058
  2. 1843059
  3. 1843060
  4. 1843061
  5. 1843062
  6. 1843063
  7. 1843064
  8. 1843065
  9. 1843066
  10. 1843067
  11. 1843068
  12. 1843069
  13. 1845510
  14. 1845511
  15. 1845512
  16. 1845513
  17. 1845514
  18. 1845515
  19. 1845516
  20. 1845517
  21. 1845518
  22. 1845519
  23. 1845650
  24. 1845651
  25. 1845652
  26. 1845653
  27. 1845654
  28. 1845655
  29. 1845656
  30. 1845657
  31. 1845658
  32. 1845659

  33. 1845681
  34. 1845682
  35. 1845683
  36. 1845684
  37. 1845685
  38. 1845686
  39. 1845687
  40. 1845688
  41. 1845689
  42. 1845690
  43. 1845691
  44. 1845692
  45. 1845693
  46. 1845694
  47. 1845695
  48. 1845696
  49. 1845697
  50. 1845698
  51. 1845699
  52. 1849040
  53. 1849041
  54. 1849042
  55. 1849043
  56. 1849044
  57. 1849045
  58. 1849046
  59. 1849047
  60. 1849048
  61. 1849049
  62. 1849050
  63. 1849051
  64. 1849960
  65. 1849961
  66. 1849962
  67. 1849963
  68. 1849964
  69. 1849965
  70. 1849966
  71. 1849967
  72. 1849968
  73. 1849969
  74. 1850551
  75. 1850560
  76. 1850565
  77. 1850567
  78. 1850569
  79. 1855501
  80. 1855511
  81. 1855515
  82. 1855540
  83. 1855541
  84. 1855542
  85. 1855550
  86. 1855551
  87. 1855568
  88. 1855569
  89. 1855634
  90. 1855635
  91. 1855636
  92. 1855637
  93. 1855638
  94. 1855639
  95. 1855650
  96. 1855651
  97. 1855652
  98. 1855653
  99. 1855654
  100. 1855655
  101. 1855656
  102. 1855657
  103. 1860551
  104. 1860565
  105. 1860965
  106. 1865410
  107. 1865411
  108. 1865412
  109. 1865413
  110. 1865414
  111. 1865415
  112. 1865416
  113. 1865417
  114. 1865418
  115. 1865419
  116. 1865505
  117. 1865510
  118. 1865511
  119. 1865512
复制代码

论坛徽章:
0
发表于 2018-06-12 09:15 |显示全部楼层
回复 18# wh7211



您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP