免费注册 查看新帖 |

Chinaunix

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

一个shell的问题_sort [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-16 09:47 |只看该作者 |倒序浏览
我有一个文件,内容是这个样子的
list_mac-ip.txt
  IP ADDRESS = 192.168.2.236 ;
  MAC ADDRESS= 00:21:70:ee:86:f3;

  IP ADDRESS = 192.168.2.250 ;
  MAC ADDRESS= 00:0c:29:ac:29:3f;

  IP ADDRESS = 192.168.2.172 ;
  MAC ADDRESS= 00:23:7d:11:69:27;

  IP ADDRESS = 192.168.2.175 ;
  MAC ADDRESS= 00:0c:29:64:5f:b8;

  IP ADDRESS = 192.168.2.209 ;
  MAC ADDRESS= 00:24:e8:ad:e2:b2;

  IP ADDRESS = 192.168.2.199 ;
  MAC ADDRESS= 00:21:70:72:24:53;

  IP ADDRESS = 192.168.2.166 ;
  MAC ADDRESS= e4:1f:13:6c:4b:a8;

  IP ADDRESS = 192.168.2.163 ;
  MAC ADDRESS= 00:24:e8:c6:f2:3f;

  IP ADDRESS = 192.168.2.193 ;
  MAC ADDRESS= 00:0c:29:ac:29:3f;

  IP ADDRESS = 192.168.2.246 ;
  MAC ADDRESS= 00:0c:29:f0:95:ce;

  IP ADDRESS = 192.168.2.165 ;
  MAC ADDRESS= 00:0c:29:67:72:9c;

  IP ADDRESS = 192.168.2.243 ;
  MAC ADDRESS= 00:0c:29:67:72:9c;

  IP ADDRESS = 192.168.2.243 ;
  MAC ADDRESS= 00:0c:29:67:72:9c;

我要把其中的相同字段合并,但格式不变化;
我用cat list_mac_ip.txt |sort -u
命令结果:类似这样:
IP ADDRESS = 192.168.2.240 ;
  IP ADDRESS = 192.168.2.241 ;
  IP ADDRESS = 192.168.2.242 ;
  IP ADDRESS = 192.168.2.243 ;
  IP ADDRESS = 192.168.2.244 ;
  IP ADDRESS = 192.168.2.245 ;
  IP ADDRESS = 192.168.2.246 ;
  IP ADDRESS = 192.168.2.247 ;
  IP ADDRESS = 192.168.2.248 ;
  IP ADDRESS = 192.168.2.249 ;
  IP ADDRESS = 192.168.2.250 ;
  IP ADDRESS = 192.168.2.84 ;
  MAC ADDRESS= 00:0b:cd:9a:a5:8d;
  MAC ADDRESS= 00:0c:29:01:99:d8;
  MAC ADDRESS= 00:0c:29:03:eb:89;
  MAC ADDRESS= 00:0c:29:09:c6:37;
  MAC ADDRESS= 00:0c:29:0c:82:e9;
  MAC ADDRESS= 00:0c:29:19:17:5d;
  MAC ADDRESS= 00:0c:29:1e:00:be;
  MAC ADDRESS= 00:0c:29:22:85:93;
  MAC ADDRESS= 00:0c:29:23:45:5a;
  MAC ADDRESS= 00:0c:29:24:ea:16;
  MAC ADDRESS= 00:0c:29:27:aa:9b;
  MAC ADDRESS= 00:0c:29:29:68:c0;
  MAC ADDRESS= 00:0c:29:2b:c7:78;
  MAC ADDRESS= 00:0c:29:3f:be:03;
  MAC ADDRESS= 00:0c:29:45:e5:72;
  MAC ADDRESS= 00:0c:29:47:da:b7;
  MAC ADDRESS= 00:0c:29:47:f3:fb;

把同字段合并了,
但格式却变化了,各位大虾,有没有什么办法解决???

论坛徽章:
0
2 [报告]
发表于 2011-06-16 09:48 |只看该作者
在线等,

论坛徽章:
0
3 [报告]
发表于 2011-06-16 09:51 |只看该作者
你想要怎样?
没说清楚嘛

论坛徽章:
0
4 [报告]
发表于 2011-06-16 09:53 |只看该作者
我要把原文件中的相同字段合并,但格式不变化;
比如:
IP ADDRESS = 192.168.2.243 ;
  MAC ADDRESS= 00:0c:29:67:72:9c;

  IP ADDRESS = 192.168.2.243 ;
  MAC ADDRESS= 00:0c:29:67:72:9c;
合并后,只显示一个,但格式不变
还是IP和MAC在一起的

论坛徽章:
0
5 [报告]
发表于 2011-06-16 09:55 |只看该作者
这样
  1. awk '/IP/{ip=$4;getline v;a[ip]=$0"\n"v"\n"}END{for (i in a) print a[i]}' file
复制代码
  1. [root@Mylinux tmp]# awk '/IP/{ip=$4;getline v;a[ip]=$0"\n"v"\n"}END{for (i in a
  2. ) print a[i]}' file
  3.   IP ADDRESS = 192.168.2.163 ;
  4.   MAC ADDRESS= 00:24:e8:c6:f2:3f;

  5.   IP ADDRESS = 192.168.2.172 ;
  6.   MAC ADDRESS= 00:23:7d:11:69:27;

  7.   IP ADDRESS = 192.168.2.250 ;
  8.   MAC ADDRESS= 00:0c:29:ac:29:3f;

  9.   IP ADDRESS = 192.168.2.165 ;
  10.   MAC ADDRESS= 00:0c:29:67:72:9c;

  11.   IP ADDRESS = 192.168.2.243 ;
  12.   MAC ADDRESS= 00:0c:29:67:72:9c;

  13.   IP ADDRESS = 192.168.2.193 ;
  14.   MAC ADDRESS= 00:0c:29:ac:29:3f;

  15.   IP ADDRESS = 192.168.2.166 ;
  16.   MAC ADDRESS= e4:1f:13:6c:4b:a8;

  17.   IP ADDRESS = 192.168.2.175 ;
  18.   MAC ADDRESS= 00:0c:29:64:5f:b8;

  19.   IP ADDRESS = 192.168.2.209 ;
  20.   MAC ADDRESS= 00:24:e8:ad:e2:b2;

  21.   IP ADDRESS = 192.168.2.236 ;
  22.   MAC ADDRESS= 00:21:70:ee:86:f3;

  23.   IP ADDRESS = 192.168.2.246 ;
  24.   MAC ADDRESS= 00:0c:29:f0:95:ce;

  25.   IP ADDRESS = 192.168.2.199 ;
  26.   MAC ADDRESS= 00:21:70:72:24:53;

  27. [root@Mylinux tmp]#
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-06-16 09:56 |只看该作者
awk很强啊...谢谢楼上

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2011-06-16 09:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2011-06-16 10:00 |只看该作者
回复 5# ywlscpl


    为什么输入的时候,有的是IP address 在前面,有的是MAC address在前面

格式能否保留每个IP address 和mac address是匹配 然后每两个用空行分开?

论坛徽章:
0
9 [报告]
发表于 2011-06-16 10:05 |只看该作者
谢谢 ,ywlscpl (白云苍狗)
回头再去研究一下awk

论坛徽章:
0
10 [报告]
发表于 2011-06-16 10:05 |只看该作者
本帖最后由 ywlscpl 于 2011-06-16 10:11 编辑

回复 8# wbbshen


    因为  IP ADDRESS = 192.168.2.250 ;
  MAC ADDRESS= 00:0c:29:ac:29:3f;

和  IP ADDRESS = 192.168.2.193 ;
  MAC ADDRESS= 00:0c:29:ac:29:3f;


MAC地址相同,如果针对行去重的,第2个MAC地址这行不打印

所以要看你需求,是针对ip去重,还是mac去重。如果是后者,我那条语句还要改
  1. awk '/IP/{v=$0;getline;a[$3]=v"\n"$0"\n"}END{for (i in a) print a[i]}' file
复制代码
保留最后那个MAC出现的那段
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP