Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1455340
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-11-09 17:12:04

一个同事过来问的问题, 就是低二位是1的, 就认为是true, 否则是false; man awk, 搜索bit, 果然直接就定位到了"Bit Manipulations Functions"这一节, 写了个测试语句, 试一下果然OK:

# echo "" | awk 'and(2, 0x2){ print "hello" }'
hello
# echo "" | awk 'and(3, 0x2){ print "hello" }' 
hello
# echo "" | awk 'and(4, 0x2){ print "hello" }' 
# echo "" | awk 'and(1, 0x2){ print "hello" }' 
其他的位运算符, 直接man awk就OK

另外提个之前在网上看到的, 使用OFS的时候, 发现没有改变行中某域的值, OFS就无效, 即:
awk 'BEGIN{ OFS="|" }{ print $0 }' file  这样打印出来的还是原来的内容。 其实可以稍微用点小技俩, 就可以实现你所想要的。 比如:
awk 'BEGIN{ OFS="|" }{ $1=$1; print $0 }' file

 
搞个计算根据ip和掩码来计算网络号和广播地址的例子:
#!/bin/bash
G_network () {
echo $@ | awk 'BEGIN{FS="[./]";OFS="."}
    END{
        print and($1,$5),and($2,$6),and($3,$7),and($4,$8)
    }'
}
G_broadcast () {
echo $@ | awk 'BEGIN{FS="[./]";OFS="."}
    END{
        print or($1,xor($5,255)),or($2,xor($6,255)),or($3,xor($7,255)),or($4,xor($8,255))
    }'
}
###
# main
###
ALL_IP=192.168.23.32/255.255.252.0
G_network $ALL_IP
G_broadcast $ALL_IP
阅读(3250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~