【Linux】 awk应用
1 统计机器上处于不同状态的所有TCP连接的个数(TCP连接是有状态连接,包含SYN_RECV, ESTABLISHED, TIME_WAIT, FIN_WAIT0, FIN_WAIT1等多种状态,要求统计各种状态下的连接的个数)。
1 netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'
此命令可以用于检查是否存在SYN-FLOODING攻击。如果SYN_RECV状态的半连接异常多,说明存在这种DDOS攻击。
2 统计目录下各类型文件的个数。$NF是每一行用-F指定的字符分隔之后,得到的最后一列。
1 ls | awk -F. '{S[$NF]++} END {for(key in S) print Key, S[key]}'
3 日期
将日期转换成数字:例如2015-08-01 01:01:01,111 -> 144XXXXXXXXXX
1 awk -F [-:,] '{print mktime($1" "$2" "$3" "$4" "$5" "$6" "$7)}'
将日期转换成数字之后,就可以做很多日期比较了,比如找到两个连续的时间间隔小于10ms的行。
4 打印不换行。
例如,只打印每一行的第9个词到行末。
1 awk '{for(i=9; i<=NF; i++) {printf $i" "; } print " " }' <file>