免费注册 查看新帖 |

Chinaunix

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

[文本处理] 均匀分配文本行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2022-07-26 19:17 |只看该作者 |倒序浏览
本帖最后由 inanin 于 2022-07-29 15:43 编辑

文件内容如下:

192.168.3.110/s-x00ABB-30617
192.168.3.110/s-x00ABB-30918
192.168.3.110/s-x00ABB-30923
192.168.3.110/s-x00ABB-30925
192.168.3.110/s-x00ABB-30928
192.168.3.110/s-x00ABB-30929
192.168.3.134/s-x00ABB-30933
192.168.3.134/s-x00ABB-30940
192.168.3.134/s-x00ABB-30947
192.168.3.134/s-x00ABB-30950
192.168.3.134/s-x00ABB-30992
192.168.3.134/s-x00ABB-30993
192.168.3.118/s-x00ABB-50003
192.168.3.118/s-x00ABB-50005
192.168.3.118/s-x00ABB-50007
192.168.3.118/s-x00ABB-50008
192.168.3.118/s-x00ABB-50009

以/分隔的第一列IP个数不确定,第二列是唯一的,IP没有分顺序一个接着一个,平均分配即可效果如下:
192.168.3.110/s-x00ABB-30617
192.168.3.134/s-x00ABB-30933
192.168.3.118/s-x00ABB-50003
192.168.3.110/s-x00ABB-30918
192.168.3.134/s-x00ABB-30940
192.168.3.118/s-x00ABB-50005
192.168.3.110/s-x00ABB-30923
192.168.3.134/s-x00ABB-30947
192.168.3.118/s-x00ABB-50007
192.168.3.110/s-x00ABB-30925
192.168.3.134/s-x00ABB-30950
192.168.3.118/s-x00ABB-50008
192.168.3.110/s-x00ABB-30928
192.168.3.134/s-x00ABB-30992
192.168.3.118/s-x00ABB-50009
192.168.3.110/s-x00ABB-30929
192.168.3.134/s-x00ABB-30993

又来麻烦版主 @wh7211 ,给摄影师加个鸡腿不如给版主两个大鸡腿!







论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
2 [报告]
发表于 2022-07-29 10:50 |只看该作者
while(<DATA>){
    @F = split /\//;
    $ip = $F[0];
    push @{$a{$ip}},$_;
    unless(grep /\b$ip\b/,@ip_list){
        push @ip_list,$ip
    }
    $c += 1;
}

$count = 0;
while(1){
    last if $count >= $c;
    $length = @ip_list;
    $get = $ip_list[$count%$length];
    if(@{$a{${get}}}){
        print shift @{$a{${get}}};
    }else{
        @ip_list = grep !/\b$get\b/,@ip_list;
        next;
    }
    $count += 1;
}

__DATA__
192.168.3.110/s-x00ABB-30617
192.168.3.110/s-x00ABB-30918
192.168.3.110/s-x00ABB-30923
192.168.3.110/s-x00ABB-30925
192.168.3.110/s-x00ABB-30928
192.168.3.110/s-x00ABB-30929
192.168.3.134/s-x00ABB-30933
192.168.3.134/s-x00ABB-30940
192.168.3.134/s-x00ABB-30947
192.168.3.134/s-x00ABB-30950
192.168.3.134/s-x00ABB-30992
192.168.3.134/s-x00ABB-30993
192.168.3.118/s-x00ABB-50003
192.168.3.118/s-x00ABB-50005
192.168.3.118/s-x00ABB-50007
192.168.3.118/s-x00ABB-50008
192.168.3.118/s-x00ABB-50009

论坛徽章:
0
3 [报告]
发表于 2022-07-29 15:37 |只看该作者
本帖最后由 inanin 于 2022-08-01 18:27 编辑

回复 2# ll104567

@ll104567,谢谢
文件有71855行,第一列从第一行开始28.37到28.43的IP有45个,到2071行28.37到28.43间隔85行
1801:192.168.28.37/s-x00ABB-212169
1845:192.168.28.43/s-x00ABB-212923
1846:192.168.28.37/s-x00ABB-212171
1890:192.168.28.43/s-x00ABB-212942
1891:192.168.28.37/s-x00ABB-212172
1935:192.168.28.43/s-x00ABB-212953
1936:192.168.28.37/s-x00ABB-212173
1980:192.168.28.43/s-x00ABB-212954
1981:192.168.28.37/s-x00ABB-212174
2025:192.168.28.43/s-x00ABB-212956
2026:192.168.28.37/s-x00ABB-212176
2070:192.168.28.43/s-x00ABB-213021
2071:192.168.28.37/s-x00ABB-212177
2156:192.168.28.43/s-x00ABB-213050
2157:192.168.28.37/s-x00ABB-212178
2200:192.168.28.43/s-x00ABB-213074
2201:192.168.28.37/s-x00ABB-212179
2244:192.168.28.43/s-x00ABB-213092
2245:192.168.28.37/s-x00ABB-212182
2288:192.168.28.43/s-x00ABB-213113
2289:192.168.28.37/s-x00ABB-212184
2332:192.168.28.43/s-x00ABB-213115

论坛徽章:
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
4 [报告]
发表于 2022-07-29 16:36 |只看该作者
本帖最后由 wh7211 于 2022-08-02 15:21 编辑

回复 1# inanin


  1. cat 1
  2. 192.168.3.110/s-x00ABB-30617
  3. 192.168.3.110/s-x00ABB-30918
  4. 192.168.3.110/s-x00ABB-30923
  5. 192.168.3.110/s-x00ABB-30925
  6. 192.168.3.110/s-x00ABB-30928
  7. 192.168.3.110/s-x00ABB-30929
  8. 192.168.3.134/s-x00ABB-30933
  9. 192.168.3.134/s-x00ABB-30940
  10. 192.168.3.134/s-x00ABB-30947
  11. 192.168.3.134/s-x00ABB-30950
  12. 192.168.3.134/s-x00ABB-30992
  13. 192.168.3.134/s-x00ABB-30993
  14. 192.168.3.118/s-x00ABB-50003
  15. 192.168.3.118/s-x00ABB-50005
  16. 192.168.3.118/s-x00ABB-50007
  17. 192.168.3.118/s-x00ABB-50008
  18. 192.168.3.118/s-x00ABB-50009

  19. awk -F"/" '{if($1!=a){b=0};b++;c[b]=c[b]?c[b]"\n"$0:$0;a=$1}END{for(i in c){print c[i]}}' 1
  20. 192.168.3.110/s-x00ABB-30617
  21. 192.168.3.134/s-x00ABB-30933
  22. 192.168.3.118/s-x00ABB-50003
  23. 192.168.3.110/s-x00ABB-30918
  24. 192.168.3.134/s-x00ABB-30940
  25. 192.168.3.118/s-x00ABB-50005
  26. 192.168.3.110/s-x00ABB-30923
  27. 192.168.3.134/s-x00ABB-30947
  28. 192.168.3.118/s-x00ABB-50007
  29. 192.168.3.110/s-x00ABB-30925
  30. 192.168.3.134/s-x00ABB-30950
  31. 192.168.3.118/s-x00ABB-50008
  32. 192.168.3.110/s-x00ABB-30928
  33. 192.168.3.134/s-x00ABB-30992
  34. 192.168.3.118/s-x00ABB-50009
  35. 192.168.3.110/s-x00ABB-30929
  36. 192.168.3.134/s-x00ABB-30993
复制代码

论坛徽章:
0
5 [报告]
发表于 2022-08-01 18:12 |只看该作者
本帖最后由 inanin 于 2022-08-01 19:00 编辑

@wh7211  

  1. 文件71855行,直接 >test.txt
  2. real        0m0.095s
  3. user        0m0.088s
  4. sys        0m0.007s

  5. 读取第一行第一个c[b],b=1,会把:冒号后面的$0的值赋值给?后面的c[b],假设问号后面连接有字符串?"-"c[b],
  6. 然后再把"-"c[b]"\n"$0的值赋值一次给=号前面那个c[b],输出的结果会带有--这两个字符串?

  7. 读取到第二个c[b],b=1的行,把:冒号前面的$0,赋值给问号后面的c[b]"\n",最终的值是c[b]"\n",不包含"-"这个字符串?

  8. 最后,i in c ,i的个数是ip行数最多的那个ip?
复制代码


论坛徽章:
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
6 [报告]
发表于 2022-08-02 15:53 |只看该作者
本帖最后由 wh7211 于 2022-08-03 10:07 编辑

回复 5# inanin


不是的。d=a?b:c等效于if(a){d=b}else{d=c}。

论坛徽章:
0
7 [报告]
发表于 2022-08-03 10:57 |只看该作者
回复 6# wh7211

,这样子看,清楚许多了,谢谢

论坛徽章:
0
8 [报告]
发表于 2022-10-14 09:28 |只看该作者
按照版主的思路改了下
  1. awk -F"/" '{a[$1]++;c[a[$1]]=c[a[$1]]?c[a[$1]]"\n"$0:$0}END{for(i in c){print c[i]}}' 1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP