注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 CCIE-Lab考试将新增10分钟..
 帮助

笨命令


2008-01-10 22:20:24
 标签:命令 LINUX sed   [推送到技术圈]

版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
110晚上在群里slamdunk聊起他要在几百个电话号码里找出重复的来,我突然想起今天上午我学的sed命令来了,就叫slamdunk把那个有电话的文本文件给我,让我练练,slamdunk就把电话号码给我了。
一些简单的命令而功能强大的命令还不会,下面只是一个笨方法。
其结构大概是这样的:
[8615940364717] to [\\.\COM10--8615801783740]
[8613664604507] to [\\.\COM10--8615801783740]
[8613831791046] to [\\.\COM10--8615801783740]
[8615959678020] to [\\.\COM10--8615801783740
 [8613785642473] to [\\.\COM10--8615801783740
 [8613915219073] to [\\.\COM10--8615801783740]
[8613859429423] to [\\.\COM10--8615801783740
[8613811268177] to [\\.\COM10--8615801783740
[8613819131161] to [\\.\COM10--8615801783740]
8613508305305] to [\\.\COM10--8615801783740]
[8613646175482] to [\\.\COM10--8615801783740]
8613575017712] to [\\.\COM10--8615801783740
8613932035877] to [\\.\COM10--8615801783740
[8615972318131] to [\\.\COM10--8615801783740]
[8615962985577] to [\\.\COM10--8615801783740]
[8613585458567] to [\\.\COM10--8615801783740]
8613851459841] to [\\.\COM10--8615801783740]
不过还有几个个别的。
下面先说说我的笨命令吧
1、先直接在XP上复制,用secureCRT连到LINUXvi建一个文件,直接复制上去,省的有些回车符不一样。取名:phone
2、大概看了一下,找了找规律,coolerfeng说电话是11个数,这是规律,可我只用了开头数字的规律和分段。
cat phone | cut -d ']' -f 1 | sed 's/\[86//g' > phone2
(因为只需要第一列的电话,把以先把第一列提出来,然后把开头是“[86”替换成无,就是删除了。)
3cat phone | cut -d ']' -f 1 | sed 's/\[86//g' | sed 's/\[//g' > phone3
cat phone3 | sed 's/^86//g' | sed 's/^009//g' | sed 's/0060//g'  | grep '^1' | more > phone4
继续替换一些别的形式开头的,主要是想把格式都一样的排列起来。怕乱了,所以每做一些改变就存一下。用sed替换完了的结果,有的行还有些日期什么的,还好这个文件不是太大,还能大概看一下。然后就grep '^1'这个把电话号码全部找出来。如果有1月开头的行也不怕,下面还可以过滤呢。
4cat phone4 | sort -n | uniq -c > phone5
sort –n 进行排序 ,用uniq –c 进行计算并去掉重复的。这样在phone5里有会那个重复几次有显示了。
5cat phone5 | sort –n
上面phone5里是在那里重复了就在那里标记,而不是在一起,不太容易看,再用sort –n排一次序,就可以按重复1次、2次、3次的这么排下来了。
这样就找出重复的出来了,我知道这是一种笨方法,还请高手们指教一些更简单,更高效的方法。谢谢!
 

本文出自 “走在左边” 博客,转载请与作者联系!





    文章评论
 
2008-01-11 08:46:22
好东西 快抢!!哈哈

2008-01-11 09:45:59
grep -o '[0-9]\{13\}' phone| sed 's/86//g'|sort -n|uniq -c|sort -n

这样更快速一些.

2008-01-11 10:01:16
修正如下:
grep -o '[0-9]\{13\}' phone| sed 's/86/'|sort -n|uniq -c|sort -n

刚才发的命令有一个缺陷.sed 's/86//g'执行全局替换后一个问题

会把11位手机号码中出现的86也替换掉.

2008-01-11 10:47:53
grep -o '[0-9]\{13\}' phone| sed 's/86//'|sort -n|uniq -c|sort -n

再次更正.

2008-01-11 11:31:27
awk 方法:
awk '{print substr($8,4,11)}' phone.log |sort -n|uniq -c|sort -n

2008-01-11 13:20:32
补充一个匹配:
awk '/INFO/{print substr($8,4,11)}' phone.log |sort -n|uniq -c|sort -n

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: