侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

awk 报表工具 【原创】

2022-07-10 星期日 / 0 评论 / 0 点赞 / 94 阅读 / 8936 字

awk 报表工具nawkgawk[root@localhost~]#ll/bin/awklrwxrwxrwx.1rootroot4Jun605:55/bin/awk->gawkawk.txt测试内容如

.

awk 报表工具

nawk

gawk

[root@localhost ~]# ll /bin/awklrwxrwxrwx. 1 root root 4 Jun  6 05:55 /bin/awk -> gawk

awk.txt测试内容如下

this a test

welcome to my home 

awk '{print $0}' awk.txt 显示一整行awk '{print $1}' awk.txt显示每行的第一段awk '{print $1,$3}' awk.txt显示每行的第一和第三段

【指定输出格式的分隔符,用双引号】

# awk 'BEGIN{OFS="#"}{print $1,$3}' awk.txt this#awelcome#my

【在print中插入任何想显示的字段,用双引号】

# awk '{print $1,"HELLO_LINUX",$3}' awk.txt this HELLO_LINUX awelcome HELLO_LINUX my

【显示每一行多少个字段】

awk '{print NF}' awk.txtawk '{print $NF}' awk.txt


把awk.txt ps.txt多个文件的行总数输出来

awk '{print NR}' awk.txt ps.txt


把awk.txt ps.txt 每个文件的行的总数分别显示出来

awk '{print FNR}' awk.txt ps.txt

awk 也可以定义变量的

# awk 'BEGIN{ta="haha";print ta}'haha# awk 'BEGIN{haha="4i932584293";print haha}'4i932584293



【修饰效果】%

%-10s   :s显示自身,10表示宽度显示10位,-表示左对齐,不写-默认右对齐,/n换行

# awk '{printf"%-10s/n",$1}' awk.txt this      welcome   # awk '{printf"%-10s %1-20s/n",$1,$2}' awk.txt this       is                  welcome    to

显示passwd中第3个字段内容,默认5个宽度右对齐

awk -F: '{printf "%5d",$3}' passwd


 


【匹配行首r开头的】-F 指定分隔符

awk -F: '/^r/{print $1}' passwd


【显示ID号大于50用户名】

awk -F: '$3>=50{print $1,$3}'awk -F: '$3+1>=50{print $1,$3}'还支持运算操作


【~匹配,把默认不能登录bash的用户筛选出来】

-F:指定分隔符

~匹配

$锚定行尾

awk -F: '$7~"nologin$"{print $1,$7}' passwd

反过来,登录不是nologin的用户都出来

awk -F: '$7!~"nologin$"{print $1,$7}' passwd


$3==0且$7是bash的  显示出来

awk -F: '$3==0,$7~"bash"{print $3,$7}' passwd

把这几个列按固定的宽对齐方式对齐

awk -F: '{printf"%-20s%-20s%-20s/n",$1,$5,$7}' passwd用BGGIN制作带有表头的输出awk -F: 'BEGIN{print"user      ID      shell"}{printf "%-20s%-20s %-20s ",$1,$3,$7}' paswdname   ID  shellroot      0         /bin/bash bin       1         /sbin/nologindaemon    2         /sbin/nologinadm       3         /sbin/nologinlp        4         /sbin/nologin


用END显示一次 打印结束

awk -F: 'BEGIN{print"name   ID  shell"}{printf "%-10s%-10s%-10s/n",$1,$3,$7}END{print "****************the end *************"}' passwdpostfix   89        /sbin/nologinsshd      74        /sbin/nologin****************the end *************

【if语句】

显示root为管理员

其他为普通

也可以显示为格式化

#awk -F: '{if ($1=="root") print $1 "    anmin";else print $1 "       common user"}' passwd#awk -F: '{if ($1~"root") print $1 "    anmin";else print $1 "       common user"}' passwd


统计ID号大于50的

-F 指定分隔符

if条件()起来

print变量不用$来引用

awk -F: -v sum=0 '{if($3>50) sum++}END{print sum}' passwd

 

【while】用于字段的循环

把每一行的每一字段都用if比较,大于4个就输出

awk -F: '{i=1;while(i<NF){if (length($i)>=4) {print $i} i++}}' passwd

 

【for循环】

awk -F: '{for(i=1;i<=NF;i++) {if (length($i)>=4) {print $i}}}' passwdfor(i=1;i<=NF;i++){if (length($i)>=4){print $i} 这个是if语句你的执行体

用数组统计netstat -tna状态

netstat -tna | awk '/^tcp/{lcl[$NF]++}END{for (S in lcl) {print S,lcl[S]}}'


统计每个IP出现的次数

# awk '{count[$1]++}END{for(ip in count) {printf "%-20s:%d/n",ip,count[ip]}}' ssh.log                     :131.2.3.4             :1134.76.86.22         :1156.8.64.32          :1145.67.86.43         :11

统计出现的次数

grep -c '45.67.86.43' ssh.log



统计别人用系统帐号的失败连接

grep 'Failed password ' secure |awk '{count[$11]++}END{for(ip in count) {printf "%-20s:%d/n",ip,count[ip]}}'

失败的来访IP与用户名 secure日志文件

sed -n '/Failed/p' secure |awk '{printf"%-15s%-15s/n", $(NF-5), $(NF-3)}'yy             10.11.12.14    4234           10.11.12.14    4234           10.11.12.14    root           10.11.12.8     root           10.11.12.8

谁成功登录过

sed -n '/Accepted/p' secureJun 11 17:16:28 localhost sshd[1166]: Accepted password for root from 10.11.12.14 port 49531 ssh2Jun 11 17:18:14 localhost sshd[1192]: Accepted password for root from 10.11.12.14 port 49534 ssh2

secure日志文件

整合以上的几条命令,登录失败的IP次数

sed -n '/Failed/p' secure |awk '{printf"%-15s%-15s/n", $(NF-5), $(NF-3)}'|awk '{count[$2]++}END{for(ip in count) {printf "%-20s:%d/n",ip,count[ip]}}'10.11.12.8          :810.11.12.14         :5


再排序一下

sed -n '/Failed/p' secure |awk '{printf"%-15s%-15s/n", $(NF-5), $(NF-3)}'|awk '{count[$2]++}END{for(ip in count) {printf "%-20s:%d/n",ip,count[ip]}}'|sort -r


显示运行3级别开启的服务:

cut -c 字符,15-,就是从15到最后

ls /etc/rc3.d/S* |cut -c 15-

 


.

广告 广告

评论区