免费注册 查看新帖 |

Chinaunix

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

[文本处理] 帮忙处理下文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-07 18:01 |只看该作者 |倒序浏览

  1. 192.168.15.221:22
  2. 192.168.15.221:80
  3. 192.168.0.252:22
  4. 192.168.0.252:80
  5. 192.168.16.116:22
  6. 192.168.16.116:80
  7. 192.168.16.16:22
  8. 192.168.16.16:80
  9. 192.168.16.100:22
  10. 192.168.16.100:80
  11. 192.168.16.162:22
  12. 192.168.16.162:80
  13. 192.168.1.125:22
  14. 192.168.1.125:80
复制代码
这个文本去除重复,然后将后面的端口添加到对应的iP后面,比如 192.168.15.221:22 80

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2015-07-07 18:07 |只看该作者
楼主大姨妈来啦
  1. awk -F: '{a[$1]=a[$1]?a[$1]" "$2:$2} END{for(i in a )print i":"a[i]}' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-07-07 18:13 |只看该作者
回复 2# reyleon


   ......如果文本里有空行的话,会有:?

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
4 [报告]
发表于 2015-07-07 18:44 |只看该作者
回复 3# 158878318


    那你先去掉空行噻, 要随机应变,一通百通呀

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2015-07-07 18:46 |只看该作者
败给你了
  1. awk -F: 'NF{a[$1]=a[$1]?a[$1]" "$2:$2} END{for(i in a )print i":"a[i]}' file
复制代码

论坛徽章:
0
6 [报告]
发表于 2015-07-07 18:58 |只看该作者
回复 5# reyleon


    awk没怎么深入看过,谢谢了。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2015-07-07 20:24 |只看该作者
  1. with open('input.txt') as f:
  2.     d = {}
  3.     for line in f:
  4.         line = line.rstrip()
  5.         field = line.split(':')
  6.         if field[0] not in d:
  7.             d.setdefault(field[0], [])
  8.         d[field[0]].append(field[1])
  9.     for k in d:
  10.         print '%s:%s' % (k, ' '.join(d[k]))
复制代码

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
8 [报告]
发表于 2015-07-07 23:52 |只看该作者

  1. <?php


  2. $file = file('1.txt');
  3. $data = array();

  4. foreach ($file as $k => $v) {

  5.    $arr = preg_split("/:/", $v);

  6.     for ($i=1; $i < count($arr); $i++) {
  7.         $arr[$i]=str_replace("\n","",$arr[$i]);
  8.         $data[$arr[0]] = ($data[$arr[0]])?$data[$arr[0]]." ".$arr[$i]:$arr[$i];
  9.     }

  10. }
  11. foreach($data as $key=>$value){
  12. echo $key.":".$value."\n";
  13. }
复制代码
效果:
192.168.15.221:22 80
192.168.0.252:22 80
192.168.16.116:22 80
192.168.16.16:22 80
192.168.16.100:22 80
192.168.16.162:22 80
192.168.1.125:22 80

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
9 [报告]
发表于 2015-07-07 23:55 |只看该作者
本帖最后由 songyc_2015 于 2015-07-08 00:10 编辑

回复 1# 158878318
  1. $cat test.pl
  2. #!/usr/bin/env perl
  3. use strict;
  4. use warnings;
  5. use Data::Dumper;

  6. my %hash;
  7. while (<ARGV>)
  8. {
  9.         chomp;
  10.         next if /^$/;
  11.         my @arr = split /:/;
  12.         $hash{$arr[0]} = length($hash{$arr[0]}) ? $hash{$arr[0]}." ".$arr[1] : $arr[1];
  13. }

  14. for (keys %hash)
  15. {
  16.         print $_." ".$hash{$_}, "\n";
  17. }
  18. $./test.pl file
复制代码
  1. perl -F: -lane 'next if /^$/;$h{$F[0]}=length($h{$F[0]})?$h{$F[0]}." ".$F[1]:$F[1];END{print $_." ".$h{$_} for keys(%h)}' file
复制代码
结果:
192.168.16.116 22 80
192.168.16.162 22 80
192.168.16.100 22 80
192.168.1.125 22 80
192.168.16.16 22 80
192.168.0.252 22 80
192.168.15.221 22 80

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
10 [报告]
发表于 2015-07-07 23:56 |只看该作者
回复 9# songyc_2015


    哇靠,随意大神威武

$hash{$arr[0]} = length($hash{$arr[0]}) ? $hash{$arr[0]}." ".$arr[1] : $arr[1];

类似php~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP