分享awk变量$0的妙用
网络编程
脚本内容:
#!/bin/bash
for ip in `cat ip.lst`
do
./ssh.exp $ip > /dev/null 2&>1
done
NK=`awk 'BEGIN{bs=4000000}/access/{if($1>bs){nk=NR-1;print nk}}' exp.log`
for nnk in $NK
do
awk -F"[@|']" 'NR=='"$nnk"' {print $2}' exp.log
done
然后又发现awk中$0的鬼怪。于是进一步简化成了这个样子:
#!/bin/bash
for ip in
`cat ip.lst`
do
./ssh.exp $ip > /dev/null 2&>1
done
awk 'BEGIN{bs=4000000}/access/{if($1>bs)print x};{x=$0}' exp.log|awk -F"[@|']" '{print $2}'
终于算是圆了自己用一句话搞定它的梦。yeah~ 不过对这个原理还是不很明白。因为print x;x=$0出来是上一行,但print $0则是本行。why? 网上对打印前一行还提出另一个写法,就看的更莫名其妙了:
awk '/regex/{print (x==""?"":x)};{x=$0}' $1
而打印后一行是这样:
awk '/regex/{getline;print}' $1
不过这毕竟是恰好上下行而已,如果是要前几行的,还是要靠NR运算了。
因为awk的流式处理,print x;x=$0,这个时候的x要等到下一行时才print出来。
批量修改ssh配置的expect脚本
第一思路,用iptables把外网ssh的包DROP掉;第二思路,用tcpwrapper把sshd的allow写死;第三思路,修改sshd_config,只监听内网请求。由于一些说不清楚的原因
用shell+sendmail实现服务器监控报警小脚本
这种email报警脚本遍地都是,很多用的sendmail、postfix,感觉有些大材小用了;也有些用perl的NET::SMTP和Authen::SASL模块发信的,不过我perl用的不好,老发出
awk中让人郁闷的system()函数
发现一个特尴尬的事实。我辛辛苦苦去百度资料,想用rewrite实现针对不同域名源站故障后的自动跳转功能,但整个思路里遗漏了一个严重的问题。按我
编辑:一起学习网
标签:思路,脚本,都是,发现,让人