awk 实用实例参考多维度架构 - 知乎​www.zhihu.com

内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

处理列

# cat /etc/fstab | awk '{print $1}'

printf

%d 十进制有符号整数

%u 十进制无符号整数

%f 浮点数

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x, %X 无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

\n 换行

\f 清屏并换页

\r 回车

\t Tab符

\xhh 表示一个ASCII码用16进表示,其中hh是1到2个16进制数

说明:

(1). 可以在"%"和字母之间插进数字表示最大场宽。

例如: %3d 表示输出3位整型数, 不够3位右对齐。

%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,小数点占一位, 不够9位右对齐。

%8s 表示输出8个字符的字符串, 不够8个字符右对齐。

如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出.但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出;若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出.

另外, 若想在输出值前加一些0, 就应在场宽项前加个0。

例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。

如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。

例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。

echo 1.7 > 2

awk '{printf ("%d\n",$1)} 2

1

awk '{printf ("%f\n",$1)}' 2

1.700000

awk '{printf ("%3.1f\n",$1)}' 2

1.7

awk '{printf ("%4.1f\n",$1)}' 2

1.7

awk '{printf ("%e\n",$1)}' 2

print 拼装rm命令实现,查找文件并删除

#!/bin/sh

LOCATE=/home/samba

find $LOCATE -name '*.eml'>log

find $LOCATE -name '*.nws'>>log

gawk '{print "rm -rf "$1}' log > rmfile

chmod 755 rmfile

./rmfile

Pattern(字符匹配)

输出包含(不包含)特定字符的行(sed也可以完成该功能):

:~$ awk '/[a-c]/ { print }' file.txt

daemon x 1 1 daemon /usr/sbin /bin/sh

bin x 2 2 bin /bin /bin/sh

sys x 3 3 sys /dev /bin/sh

sync x 4 65534 sync /bin /bin/sync

games x 5 60 games /usr/games /bin/sh

man x 6 12 man /var/cache/man /bin/sh

lp x 7 7 lp /var/spool/lpd /bin/sh

mail x 8 8 mail /var/mail /bin/sh

news x 9 9 news /var/spool/news /bin/sh

uucp x 10 10 uucp /var/spool/uucp /bin/sh

proxy x 13 13 proxy /bin /bin/sh

www-data x 33 33 www-data /var/www /bin/sh

backup x 34 34 backup /var/backups /bin/sh

list x 38 38 Mailing List Manager /var/list /bin/sh

irc x 39 39 ircd /var/run/ircd /bin/sh

gnats x 41 41 Gnats Bug-Reporting System (admin) /var/lib/gnats /bin/sh

nobody x 65534 65534 nobody /nonexistent /bin/sh

libuuid x 100 101 /var/lib/libuuid /bin/sh

syslog x 101 103 /home/syslog /bin/false

sshd x 102 65534 /var/run/sshd /usr/sbin/nologin

landscape x 103 108 /var/lib/landscape /bin/false

mysql x 104 112 MySQL Server,,, /var/lib/mysql /bin/false

ntpd x 105 114 /var/run/openntpd /bin/false

postfix x 106 115 /var/spool/postfix /bin/false

nagios x 107 117 /var/lib/nagios /bin/false

chun x 1003 1003 Li Fu Chun,,, /home/chun

munin x 108 118 /var/lib/munin /bin/false

$ awk '!/[a-c]/ { print }' file.txt

root x 0 0 root /root

neo x 1000 1000 neo,,, /home/neo

采用判断来输出特定的列数据:

neo@monitor:~$ sed -e 's/:/ /g' /etc/passwd | awk '$1 == "neo" { print $1 }'

neo

部分包含,不包含指定的字符:

$ awk '$1 ~ /[a-d]/ { print }' file.txt

$ awk '$1 !~ /[a-d]/ { print }' file.txt

Pattern, Pattern

# awk '/www/,/Web/ {print}' /etc/passwd

www:x:80:80:Web User:/www:/bin/bash

# awk '/www/,/[Ww]eb/ {print}' /etc/passwd

www:x:80:80:Web User:/www:/bin/bash

cat /var/log/rinetd.log | awk -F' ' '$7 ~ /0/ {print $1"\t"$2"\t"$7"\t"$8"\t"$9}'

# cat /var/log/rinetd.log | awk -F' ' '$7 ~ /(210|209|210)/ {print $1"\t"$2"\t"$7"\t"$8"\t"$9}'

Built-in Variables (NR/NF)

例如 : awk 读入第一笔数据行

"aaa bbb ccc ddd" 之后, 程序中:

$0 之值将是 "aaa bbb ccc ddd"

$1 之值为 "aaa"

$2 之值为 "bbb"

$3 之值为 "ccc"

$4 之值为 "ddd"

$NF 之值为 4

$NR 之值为 1

NR

NR=n 指定n行号

# awk -F':' 'NR==1 {print $(1)}' /etc/passwd

root

# awk -F':' 'NR==2 {print $(1)}' /etc/passwd

bin

取 1,3,4行

# awk 'NR==1; NR==3; NR==4 {print $1}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

awk ... '{if(NR=1){...}else{exit)}'

$ awk -F' ' '{if(NR==1) print $1}' /etc/issue

Ubuntu

NF

# echo "aaa bbb ccc ddd" | awk '{print $(NR)}'

aaa

# echo "aaa bbb ccc ddd" | awk '{print $(NR+1)}'

bbb

# echo "aaa bbb ccc ddd" | awk '{print $(NR+2)}'

ccc

# echo "aaa bbb ccc ddd" | awk '{print $(NF)}'

ddd

# echo "aaa bbb ccc ddd" | awk '{print $(NF-1)}'

ccc

# echo "aaa bbb ccc ddd" | awk '{print $(NF-2)}'

bbb

uptime | awk '{print $(NF-2)}'

[root@netkiller ~]# netstat -na |awk '/^tcp/ {print NF}' | head -n 1

6

[root@netkiller ~]# netstat -ant |awk '/^tcp/ {print $NF}' | tail -n 5

TIME_WAIT

CLOSE_WAIT

CLOSE_WAIT

LISTEN

LISTEN

[root@netkiller ~]# netstat -ant |awk '/^tcp/ {print $(NF-5)}' | tail -n 5

tcp

tcp

tcp

tcp6

tcp6

练习

使用 ss 命令统计 TCP 状态

[root@netkiller ~]# ss -ant | awk '{++S[$1]} END {for(a in S) print a, S[a]}'

LISTEN 13

CLOSE-WAIT 42

ESTAB 95

State 1

FIN-WAIT-2 20

LAST-ACK 44

SYN-SENT 10

TIME-WAIT 403

[root@netkiller ~]# ss -ant | awk 'BEGIN {stats["CLOSE-WAIT"]=0;stats["ESTAB"]=0;stats["FIN-WAIT-1"]=0;stats["FIN-WAIT-2"]=0;stats["LAST-ACK"]=0;stats["SYN-RECV"]=0;stats["SYN-SENT"]=0;stats["TIME-WAIT"]=0} {++stats[$1]} END {for(a in stats) print a, stats[a]}'

LISTEN 6

SYN-RECV 0

ESTAB 4

CLOSE-WAIT 0

State 1

FIN-WAIT-1 0

LAST-ACK 0

FIN-WAIT-2 0

TIME-WAIT 3

SYN-SENT 0

TCP/IP Status

netstat -ant | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

TIME_WAIT 88

CLOSE_WAIT 6

FIN_WAIT1 9

FIN_WAIT2 9

ESTABLISHED 303

SYN_RECV 126

LAST_ACK 5

ss | awk '$1 !~ /State/ {++state[$1]} END {for(key in state) print key,"\t",state[key]}'

LAST-ACK 1

ESTAB 5

FIN-WAIT-2 1

CLOSE-WAIT 13

用户shell统计

# cat /etc/passwd | awk -F':' '{++shell[$NF]} END {for(key in shell) print key,"\t",shell[key]}'

/sbin/shutdown 1

/bin/sh 1

/bin/bash 3

/sbin/nologin 20

/sbin/halt 1

/bin/sync 1

access.log POST与GET统计

# cat /www/logs/access.log | egrep -o 'GET|POST' | awk '{++method[$NF]} END {for(num in method) print num, method[num]}'

POST 422

GET 188571

# cat /www/logs/access.log | egrep -o 'GET|POST' | awk '{++method[$1]} END {for(num in method) print num, method[num]}'

POST 422

GET 188573

Built-in Functions

length

# awk -F: 'length($1)<4 {print NR , $1}' /etc/passwd

2 bin

4 adm

5 lp

14 ftp

20 ntp

22 rpc

25 www

toupper() 转为大写字母

[root@localhost ~]# awk '{print toupper($1)}' /etc/passwd

ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN

ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN

LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN

SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC

SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN

HALT:X:7:0:HALT:/SBIN:/SBIN/HALT

MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN

OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN

GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN

FTP:X:14:50:FTP

NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN

SYSTEMD-NETWORK:X:192:192:SYSTEMD

DBUS:X:81:81:SYSTEM

POLKITD:X:999:997:USER

POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN

CHRONY:X:998:996::/VAR/LIB/CHRONY:/SBIN/NOLOGIN

SSHD:X:74:74:PRIVILEGE-SEPARATED

NTP:X:38:38::/ETC/NTP:/SBIN/NOLOGIN

DHCPD:X:177:177:DHCP

WWW:X:80:80:WEB

NGINX:X:997:995:NGINX

MYSQL:X:27:27:MYSQL

REDIS:X:1000:1000::/VAR/LIB/REDIS:/BIN/FALSE

ETHEREUM:X:1001:1001::/HOME/ETHEREUM:/BIN/BASH

MONGOD:X:996:991:MONGOD:/VAR/LIB/MONGO:/BIN/FALSE

tolower() 转为小写字母

[root@localhost ~]# awk -F '\n' '{print tolower($1)}' /etc/redhat-release

centos linux release 7.5.1804 (core)

rand() 随机数生成

neo@MacBook-Pro ~ % awk 'BEGIN{print rand()*1000000}'

840188

neo@MacBook-Pro ~ % awk 'BEGIN{srand(); print rand()}'

0.0334342

neo@MacBook-Pro ~ % awk 'BEGIN{srand(); print rand()*1000000}'

759412

过滤相同的行

grep 'Baiduspider' access.2011-02-22.log | awk '{print $1}' | awk '! a[$0]++'

awk '! a[$0]++' 1.txt >2.txt

这个是删除文件中所有列都重复的记录

awk '! a[$1]++' 1.txt >2.txt

删除文件中第一列重复的记录

awk '! a[$1,$2]++' 1.txt >2.txt

删除文件中第一,二列都重复的记录

数组演示

[root@localhost ~]# awk -F ':' 'BEGIN {count=1;} {name[count] = $1;count++;}; END{for (i = 1; i < NR; i++) print i, name[i]}' /etc/passwd

1 root

2 bin

3 daemon

4 adm

5 lp

6 sync

7 shutdown

8 halt

9 mail

10 operator

11 games

12 ftp

13 nobody

14 systemd-network

15 dbus

16 polkitd

17 postfix

18 chrony

19 sshd

20 ntp

21 dhcpd

22 www

23 nginx

24 mysql

25 redis

26 ethereumnetkiller:sed 实用实例参考​zhuanlan.zhihu.com

mysql awk_awk 实用实例参考相关推荐

  1. mysql awk_Awk实用手册(全)

    Awk是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母 ...

  2. python数据库实例_Python操作MySQL数据库9个实用实例

    用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...

  3. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...

    内容简介 郑明秋.蒙连超.赵海侠主编的<MySQL数据库实用教程>是作者在多年的数据库开发实践与教学经验的基础上,根据计算机相关专业的职业岗位能力需求及学生的认知规律倾心组织编写的.本教材 ...

  4. mysql 多配置文件实例安装_mysql安装之多实例多配置文件安装

    一.多实例安装简介 所谓多实例安装其实是指在一台机器上开启多个不同的mysql服务端口(3306,3307),运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自 ...

  5. python爬取mysql数据_Python爬取数据并写入MySQL数据库的实例

    Python爬取数据并写入MySQL数据库的实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python爬取数据并写入MySQL数据库的实例.txt ] (友 ...

  6. mysql数据库多实例部署

    本文系统:rhel5.8 ip : 192.168.100.150 数据库版本:mysql-5.6.15 1.创建部署mysql服务账号: 1 2 3 4 [root@daf ~]# useradd  ...

  7. php ajax简单实例代码,Ajax的简单实用实例代码

    这篇文章主要介绍了Ajax的简单实用实例代码,对ajax感兴趣的朋友可以参考下Ajax的简单实用的方法 我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图: 实现主要过程: 在User ...

  8. python爬取新闻存入数据库_Python爬取数据并写入MySQL数据库的实例

    按 F12 或 ctrl+u 审查元素,结果如下: 结构很清晰简单,我们就是要爬 tr 标签里面的 style 和 tr 下几个并列的 td 标签,下面是爬取的代码: #!/usr/bin/env p ...

  9. mysql备份单实例(一)shell

    一.脚本说明 1.需要备份2个库(mysqltest1 mysqltest) 2.开启4个进程 3.可以选择进行备份不压缩和备份压缩 4.可以对不需要的数据库剔除 5.backup用户在数据库里的权限 ...

  10. mysql 存储过程实际应用,mysql 存储过程应用实例

    mysql 存储过程应用实例 1.字段加iddeclare @i int select @i=count(*) from member while @i>0 begin Update membe ...

最新文章

  1. undefined reference to android log print,undefined reference to '__android_log_print'
  2. OpenTsdb官方文档-----理解指标和时间序列
  3. python网络编程—Socket
  4. 高级SQL优化(三) 常用优化工具 ——《12年资深DBA教你Oracle开发与优化——性能优化部分》...
  5. boost::mpi模块对 broadcast() 集合的测试
  6. Nginx的平滑升级记录---适用于编译安装的Nginx
  7. windows 7 64bit python3.3安装pyqt
  8. 5数之和python_Python基本语法5:数字和列表,基础,五
  9. linux redis 安装部署,Linux Redis安装部署
  10. HDU3853:LOOPS
  11. 华为鸿蒙deveco studio编译时提示Browserslist: caniuse-lite is outdated的解决办法
  12. 移动通信网络架构的演进
  13. 【informix】解决启动报错大全,以及解决办法
  14. linux chsh命令参数及用法详解(linux设置系统shell命令) 详细出处参考:http://www.jb51.net/LINUXjishu/57945.html
  15. 微信小程序 使用 fly接口请求框架
  16. 【2016.5.27】再见,软件工程,你好,软件工程。
  17. 2022-04-05 学习记录--React-React UI组件库-ant-design(蚂蚁金服)—— 按需引入样式 + 自定义主题
  18. 不改一行代码!快速迁移 Koa 应用上云
  19. linux 运行脚本时报错:语法错误: 未预期的文件结尾
  20. java 抽象final_java抽象、接口 和final

热门文章

  1. 基于线程池技术的web服务器
  2. Android MediaPlayer播放raw资源封装类
  3. 首个应用到大规模真实工业场景的神经网络控制系统在谷歌上线了
  4. vue2.x 父组件监听子组件事件并传回信息
  5. BZOJ3495 : PA2010 Riddle
  6. cocos3.2触摸事件接收顺序
  7. UML学习系统(一)
  8. ArrayList、LinkedList原理
  9. mybatis 打印自定义完整日志
  10. 分布式文件存储FastDFS之配置Nginx模块