一个同事过来问的问题, 就是低二位是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
阅读(3289) | 评论(0) | 转发(0) |