免费注册 查看新帖 |

Chinaunix

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

awk 的一个应用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-29 15:48 |只看该作者 |倒序浏览
[root@localhost liumiao]# cat abc
a   b   122.205.13.175     c
a   b   122.205.13.176     c
a   b   122.205.13.177     c
a   b   122.205.13.178.1.123     c
a   b   122.205.13.179     c
a   b   122.205.13.110.23.56     c
a   b   122.205.13.111     c

如上一个文本文件 ,我想把ipv4的地址所在行取出来,即滤掉含有ipv6的行,该怎么做呢?
好长时间没做shell,一下子碰到这个问题,都陌生了,哎。。。求各位大大不吝赐教~

我的思路是把第三项即$3取出来,然后用  .   作为分隔符,再判断$NF是否为4  不知道这样的思路对不对,但是我都不知道怎么去写了。。求指导

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-06-29 15:58 |只看该作者
本帖最后由 TasteOracle 于 2011-06-29 15:59 编辑
  1. awk -F. 'NF==4' abc
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
3 [报告]
发表于 2011-06-29 16:01 |只看该作者
grep -vP '(?:.+?\.){4}' file

论坛徽章:
0
4 [报告]
发表于 2011-06-29 16:03 |只看该作者
回复 2# TasteOracle


   非常感谢~~   
   这样的确可以解决我描述的这个问题,但是这样我总感觉不是那么的完美。。。如果用我描述的那种思路,应该怎么来写这个awk语句呢

论坛徽章:
0
5 [报告]
发表于 2011-06-29 16:04 |只看该作者
想法同楼主一样,但是不用把$3取出来吧,直接以 .  作为分隔符,判断NF==4的
awk -F "." 'NF==4{print  }'  abc

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-06-29 16:40 |只看该作者
回复 4# liumiao123


    你的思路:
  1. awk '{n=split($3,m,".")if(n==4)print $0}' abc
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-06-29 16:48 |只看该作者
回复 1# liumiao123


    $3按.分割的域数

  $0按.分割的域数
没有区别啊?因为$0中除了$3,其他域不会包含.

所以2楼的思路跟楼主的思路是一样的

论坛徽章:
0
8 [报告]
发表于 2011-06-29 18:03 |只看该作者
本帖最后由 liumiao123 于 2011-06-29 18:11 编辑

回复 6# TasteOracle


    恩,是的,我想这就是那个思路的实现方法了。非常感谢~~

   不过if前面好像漏写了一个分号

   正常如下:
   awk '{n=split($3,m,".";if(n==4)print $0}' abc

   不过今天又学了一点,原来awk内置的split方法还有返回值,是数组里面元素的个数,这个以前还真没注意,谢谢啦~

论坛徽章:
0
9 [报告]
发表于 2011-06-29 18:07 |只看该作者
回复 7# ywlscpl


    是的,因为这个文本文件是我写的一个例子,用哪种方法无所谓。
    其实正如你所说,如果其他项(如$1,$2)里面含有   .   的话,还是先把$3取出来比较好,那样的话就不管其他项里面有没有  .   ,都可以取得正确结果了

论坛徽章:
0
10 [报告]
发表于 2011-06-29 18:12 |只看该作者
回复 3# ziyunfei


    用grep也是一种不错的思路~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP