三剑客awk教程

AWK基础教程 前言 之前针对WorkerHub小程序做的数据分析文章 XXX 收到了一些小伙伴的回复,点名要学习数据分析,其实我也是一知半解,想着来写几篇文章简单聊下我分析的过程。 首先是数据清洗和统计了,这块我并没有用诸如Python之类的脚本语言,虽然Python提供了很多强大的数据分析库如Pandas、Numpy等,但是毕竟要麻烦一些,还要写个脚本,装一堆库(PS:其实就是懒)。 我用的是一个老的Unix工具 AWK,虽然历史比较久远,但是它简洁和丰富的功能可以称之为神器,同时也是后台同学必须要掌握的一个工具, 阅读详情

目录

awk 概述:

命令格式:

awk常见的内建变量:

awk工作流程:

awk基本操作

awk取列

awk行列并合

awk统计功能

BEGIN{}和END{}

BEGIN{}

END{}

awk判断,循环

if判断:

for循环

while循环


awk 概述:

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

命令格式:

awk 选项 ‘条件 {动作}’    文件 


awk常见的内建变量:

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。

awk工作流程:

AWK 工作流程可分为三个部分:

  • 读输入文件之前执行的代码段(由BEGIN关键字标识)。
  • 主循环执行输入文件的代码段。
  • 读输入文件之后的代码段(由END关键字标识)。

awk基本操作

以/etc/passwd为例

案例一:取出第2行

awk 'NR==2' /etc/passwd
awk '条件' 文件

[root@filebest ~]# awk 'NR==2' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin

案例二:取出包含sync或halt的行

awk '/sync|halt/' /etc/passwd
awk '/条件|条件/' 文件

[root@filebest ~]# awk '/sync|halt/' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt

案例三:取出第三行到第五行的内容

awk 'NR>=2 && NR <=5' /etc/passwd
awk '条件 && 条件' 文件

[root@filebest ~]# awk 'NR>=2 && NR <=5' /etc/passwd
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

案例四:取出第二十行到最后一行的内容

[root@filebest ~]# awk 'NR>=20' /etc/passwd
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

案例五:取出从包含sync的行到包含halt的行

awk '/sync/,/halt/' /etc/passwd
awk '/条件/ , /条件/' 文件

[root@filebest ~]# awk '/sync/,/halt/' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

awk取列

格式:awk '{print $数字}'

awk在取列的时候,默认以空格为分隔符,如果分隔符不是空格,则需要添加选项-F来指定分隔符

案例一:取出ls -lh 命令中的第一列和第三列

ls -lh |awk '{print $1,$3}'

[root@filebest ~]# ls -lh |awk '{print $1,$3}'
总用量 
-rw-r--r-- root
-rw-------. root
-rw-rw-rw- root

 案例二:查看所有内容并显示行号

awk '{print NR ,$0}' /etc/passwd


[root@filebest ~]# awk '{print NR ,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18 abrt:x:173:173::/etc/abrt:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
21 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
22 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
23 chrony:x:997:995::/var/lib/chrony:/sbin/nologin
24 ntp:x:38:38::/etc/ntp:/sbin/nologin
25 tcpdump:x:72:72::/:/sbin/nologin
26 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

案例三:取出/etc/passwd中的第一列和第三列

awk -F: '{print $1 ,$3}' /etc/passwd |column -t

column -t 是对齐如果不对齐就是下面这样

awk -F: '{print $1 ,$3}' /etc/passwd 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
libstoragemgmt 998
abrt 173
rpc 32
tss 59
sshd 74
postfix 89
chrony 997
ntp 38
tcpdump 72
apache 48

对齐的话是这样的
awk -F: '{print $1 ,$3}' /etc/passwd |column -t
root             0
bin              1
daemon           2
adm              3
lp               4
sync             5
shutdown         6
halt             7
mail             8
operator         11
games            12
ftp              14
nobody           99
systemd-network  192
dbus             81
polkitd          999
libstoragemgmt   998
abrt             173
rpc              32
tss              59
sshd             74
postfix          89
chrony           997
ntp              38
tcpdump          72
apache           48

案例四:取出ip.txt中的192.168.100.6(awk中指定多个分割符)

首先创建ip.txt
echo '     inet 192.168.100.6/24 brd 192.168.100.255 scope global noprefixroute ens33' > ip.tx
t

#对于初学者建议一步一步来,大不了多写几个|
#先读取第二列,在指定分割符读取第一列
[root@filebest ~]# awk '{print $2}' ip.txt |awk -F / '{print $1}'
192.168.100.6

#如果可以理解上边的命令,就可以这里要说的awk中指定多个分隔符
[root@filebest ~]# awk -F'inet | /24' '{print $2}' ip.txt 
192.168.100.6

#指定多个分割符就是在设置分隔符时,使用正则表达式定义多个分隔符
awk -F'inet |/24' '{print $2}' ip.txt 

[root@filebest ~]#  awk -F'inet |/24' '{print $2}' ip.txt 
192.168.100.6

#以空格和/为分隔符
awk -F '[ /]' '{print $7}' ip.txt

[root@filebest ~]# awk -F '[ /]' '{print $7}' ip.txt
192.168.100.6
################################################################################
awk -F '[ /]+' '{print $3}' ip.txt            #+去除重复

[root@filebest ~]# awk -F '[ /]+' '{print $3}' ip.txt
192.168.100.6

案例五:取出/etc/passwd中第一列,第三列和最后一列并对齐

awk -F: '{print $1,$3,$NF}' /etc/passwd |column -t

[root@filebest ~]# awk -F: '{print $1,$3,$NF}' /etc/passwd |column -t
root             0    /bin/bash
bin              1    /sbin/nologin
daemon           2    /sbin/nologin
adm              3    /sbin/nologin
lp               4    /sbin/nologin
sync             5    /bin/sync
shutdown         6    /sbin/shutdown
halt             7    /sbin/halt
mail             8    /sbin/nologin
operator         11   /sbin/nologin
games            12   /sbin/nologin
ftp              14   /sbin/nologin
nobody           99   /sbin/nologin
systemd-network  192  /sbin/nologin
dbus             81   /sbin/nologin
polkitd          999  /sbin/nologin
libstoragemgmt   998  /sbin/nologin
abrt             173  /sbin/nologin
rpc              32   /sbin/nologin
tss              59   /sbin/nologin
sshd             74   /sbin/nologin
postfix          89   /sbin/nologin
chrony           997  /sbin/nologin
ntp              38   /sbin/nologin
tcpdump          72   /sbin/nologin
apache           48   /sbin/nologin

awk行列并合

案例一:过滤出 /etc/passwd中第三列包含1和2的行

awk -F: '$3 ~ /[12]/' /etc/passwd

[root@filebest ~]# awk -F: '$3 ~ /[12]/' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

案例二:过滤出/etc/passwd中第三列以1,2打头的行

awk -F: '$3 ~ /^[12]/' /etc/passwd

[root@filebest ~]# awk -F: '$3 ~ /^[12]/' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

案例三: 过滤出/etc/passwd中第三列不包含1和2的行

awk -F: '$3 !~ /[12]/' /etc/passwd

[root@filebest ~]# awk -F: '$3 !~ /[12]/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
nobody:x:99:99:Nobody:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

案例四:过滤出passwd中第三列以0-3结尾的,显示第一列和第三列

awk -F: '$3 ~ /[0-3]$/{print $1,$3}' /etc/passwd

[root@filebest ~]# awk -F: '$3 ~ /[0-3]$/{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
operator 11
games 12
systemd-network 192
dbus 81
abrt 173
rpc 32
tcpdump 72

案例五:过滤出passwd中第三列大于零小于100的内容,显示其第一列和第三列

awk -F: '$3 >0 && $3<100 {print $1,$3}' /etc/passwd |column -t

[root@filebest ~]# awk -F: '$3 >0 && $3<100 {print $1,$3}' /etc/passwd |column -t
bin       1
daemon    2
adm       3
lp        4
sync      5
shutdown  6
halt      7
mail      8
operator  11
games     12
ftp       14
nobody    99
dbus      81
rpc       32
tss       59
sshd      74
postfix   89
ntp       38
tcpdump   72
apache    48

案例六:过滤出网卡配置文件中的ip地址

#如果不知道网卡配置,可以先cat /etc/sysconfig/network-scripts/ifcfg-ens33查看想要过滤的内容
#没有条件,只需要过滤ip地址
#我的配置文件是
[root@filebest ~]# cat -n /etc/sysconfig/network-scripts/ifcfg-ens33
     1  TYPE=Ethernet
     2  PROXY_METHOD=none
     3  BROWSER_ONLY=no
     4  BOOTPROTO=static
     5  DEFROUTE=yes
     6  IPV4_FAILURE_FATAL=no
     7  IPV6INIT=yes
     8  IPV6_AUTOCONF=yes
     9  IPV6_DEFROUTE=yes
    10  IPV6_FAILURE_FATAL=no
    11  IPV6_ADDR_GEN_MODE=stable-privacy
    12  NAME=ens33
    13  DEVICE=ens33
    14  ONBOOT=yes
    15  IPADDR=192.168.100.6
    16  netmask=255.255.255.0

#过滤ip思路
#先过滤包含IPADDR的行,在以=为分割符,输出第二段
awk -F= '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 

[root@filebest ~]#  awk -F= '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 
192.168.100.6

#也可以通过行号查看
awk -F= 'NR==15{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 

[root@filebest ~]# awk -F= 'NR==15{print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 
192.168.100.6


案例七:过滤出ens33的ip地址

ip a s ens33 |awk -F'inet |/'  '/inet /{print $2}'

[root@filebest ~]# ip a s ens33 |awk -F'inet |/'  '/inet /{print $2}'
192.168.100.6

awk统计功能

BEGIN{}和END{}

  • 是awk中特殊的条件模式
  • 这两个条件都与计算相关,常用的是END
特殊条件(模式)含义应用场景
BEGIN{}BEGIN{}会在awk读取文件之前执行

1、进行实验

2、进行计算,不需要读取内容

3、创建或修改awk变量

END{}END{}会在awk读取文件之后执行1、awk在读取文件的时候进行统计与计算,最红统计完成在END输出最终结果

BEGIN{}

例如在BEGIN{}计算1/2

[root@filebest ~]# awk 'BEGIN { print 1/2 }'
0.5

END{}

案例一:统计/etc/passwd的行数

#动作:i++    #统计次数类似于wc -l,i是变量名字随便起
#i++公式全程是i = i+1.最后输出i

awk '{i++} END{print i}' /etc/passwd

[root@filebest ~]# awk '{i++} END{print i}' /etc/passwd
26

等同于wc -l
[root@filebest ~]# wc -l /etc/passwd
26 /etc/passwd

案例二:统计/etc/passwd中不可登录的用户数量

#首先看一下有哪些用户不能登录
awk '/bin\/nologin$/ {print $0}' /etc/passwd
#其中\是转义符

[root@filebest ~]# awk '/bin\/nologin$/ {print $0}' /etc/passwd
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
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 User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

#进行统计
awk '/bin\/nologin$/ {i++} END{print i}' /etc/passwd

[root@filebest ~]# awk '/bin\/nologin$/ {i++} END{print i}' /etc/passwd
22

#wc -l 验证
[root@filebest ~]# awk '/bin\/nologin$/ {print $0}' /etc/passwd |wc -l
22




案例三:统计/etc/service中空行的数量

awk '/^$/ {i++} END{print i}' /etc/services 

[root@filebest ~]# awk '/^$/ {i++} END{print i}' /etc/services 
17

案例四:统计流量

假设一个人第一天用了

1g

2g

5g

4g

2g

1g

这么多流量,统计他一共用了多少流量

cat >liuliang.txt <<EOF
> 1g
> 
> 2g
> 
> 5g
> 
> 4g
> 
> 2g
> 
> 1g
> EOF

awk -Fg '{print $1}' liuliang.txt |awk '{i=i+$1} END{print s}'
#本质上和上面的一样
#刚刚的i++    等同于i=i+1
#这里将1替换成$1的数,就是求和了



[root@filebest ~]# awk -Fg '{print $1}' liuliang.txt |awk '{s=s+$1} END{print s}'
15

案例五:生产工作案例,统计access.log中一共用了多少流量

#内容是
192.168.100.4 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.2 - - [07/Apr/2023:08:33:36 +0800] "GET /test7.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.6 - - [07/Apr/2023:08:33:36 +0800] "GET /test8.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.7 - - [07/Apr/2023:08:33:36 +0800] "GET /test15.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.42 - - [07/Apr/2023:08:33:36 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.124 - - [07/Apr/2023:08:33:36 +0800] "GET /test7.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test8.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.45 - - [07/Apr/2023:08:33:36 +0800] "GET /test2.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test15.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.12 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.87 - - [07/Apr/2023:08:33:36 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.75 - - [07/Apr/2023:08:33:36 +0800] "GET /test12.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.178 - - [07/Apr/2023:08:33:36 +0800] "GET /test9.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.196 - - [07/Apr/2023:08:33:36 +0800] "GET /test13.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.215 - - [07/Apr/2023:08:33:36 +0800] "GET /test16.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.154 - - [07/Apr/2023:08:33:36 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.124 - - [07/Apr/2023:08:33:36 +0800] "GET /test12.html HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:32 +0800] "GET /test3.html HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.100.123 - - [07/Apr/2023:08:33:32 +0800] "GET /test19.html HTTP/1.1" 200 13 "-" "curl/7.29.0"

#统计流量
awk '{i=i+$10} END{print i}' access_log 

[root@filebest ~]# awk '{i=i+$10} END{print i}' access_log 
251
#最后结果的单位是字节,字节如果想到kb那就
awk '{i=i+$10} END{print i/1024}' access_log 
#kb想到MB那就在/1024以此类推
awk '{i=i+$10} END{print i/1024/1024}' access_log 
#或者写
awk '{i=i+$10} END{print i/1024^2}' access_log 

[root@filebest ~]#  awk '{i=i+$10} END{print i/1024/1024}' access_log 
0.000239372
[root@filebest ~]# awk '{i=i+$10} END{print i/1024^2}' access_log 
0.000239372
#Gb就是i/1024^3
#TB就是i/1024^4

awk判断,循环

if判断:

格式:

if(){}				   : 单分支

if(){}else{} 		   : 双分支

if(){}else if(){}else{}	: 多分支

案例一:判断/etc/passwd文件中第三列大于第四列输出大于,第三列小于第四列输出小于,否则输出相等

awk -F: '{if($3>$4){print "大于"}else if($3<$4){print "小于"}else{print "等于"}}' /etc/passwd

awk -F: '{if($3>$4){print "大于"}else if($3<$4){print "小于"}else{print "等于"}}' /etc/passwd
等于
等于
等于
小于
小于
大于
大于
大于
小于
大于
小于
小于
等于
等于
等于
大于
大于
等于
等于
等于
等于
等于
大于
等于
等于
等于

案例二:if判断打印隔五一行线

awk '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd

[root@filebest ~]# awk '{if(NR%5==0){print "----------------"}print $0}' /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 User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
----------------
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
----------------
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
----------------
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

for循环

将/etc/passwd每一行打印两次

awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd

[root@filebest ~]# awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

while循环

将/etc/passwd每一行打印两次

awk -F: '{i=0;while(i<2) {print $0,i++}}' /etc/passwd

[root@filebest ~]# awk -F: '{i=0;while(i<2) {print $0,i++}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

Linux三剑客之awk 命令使用教程 若分隔符为制表符(\tawk -F'\t' '{print $1}' 文件.txtawk命令凭借其简洁的语法和强大的数据处理能力,成为文本分析、日志处理、数据清洗等场景的必备工具。通过灵活组合模式匹配字段操作和逻辑计算,可高效解决各类数据处理需求。建议通过实际案例反复练习,逐步掌握其进阶用法(如数组、函数定义等),进一步提升工作效率。 阅读详情

相关推荐

[Linux教程]Linux 三剑客之 awk 实战详解

前言 我们知道 Linux 三剑客,它们分别是: grep 、 sed 、 awk 。 sed可以实现非交互式的字符串替换, grep 能够实现有效的过滤功能。与两者相比, awk 是一款强大的文本分析工具,在对数据分析并生成报告时,显得尤为强悍。 awk 强大的功能,是一般 Linux 命令无法比拟的。在本文中,我不会告诉你 awk 也是一种编程语言,免得会吓到你。我们只需把它当做 Linux 下一款强大的文本分析工具即可。 场景 学习具体使用前,先来看下 awk 能干些什么事情: 能够将给定的文本内

kali_Ma的博客 933

AWK的简介和教程

AWK是一种强大的文本处理工具,它可以用简单的编程语言来实现复杂的文本操作。AWK是由Aho、Weinberger和Kernighan三位大牛在1977年开发的,因此也叫做AWK语言。AWK的名字来源于它们的姓氏首字母。AWK的基本思想是将输入文件分割成多个记录和字段,然后对每个记录执行一系列的模式和动作。模式是一种条件表达式,用来匹配记录或字段。动作是一段AWK代码,用来处理匹配的记录或字段。AWK有很多实现版本,其中最常用的是GNU AWK(gawk),它是GNU项目的一部分,拥有很多扩展功能。

lhq1363511234的博客 1388

Linux系列:Awk的使用方法(指定输入、输出分隔符)

目录 demo 语法 和sed的区别 指定输入、输出分隔符 显示行号 demo 语法 和sed的区别 指定输入、输出分隔符 FS field separator OFSoutput fieldseparator 显示行号 FNR fixed number of row 。多个文件时,每个文件编号都从0开始 NRnumber of row ...

NIO4444 941

awk详细教程-基础篇

1.前言 awk是Unix环境下一个强大的文本分析工具,相对于grep和sed,awk在其对数据分析并生成报告时,显得尤为强大。它还有许多精心设计的特性,支持awk脚本语言执行,从而极大程度提高重用率。其功能就是把文件默认逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。这里之所以说默认,是因为这里也是有配置项进行修改的。 2.环境准备 这里主要准备一个文本文件,名称建议为awk.txt,内容如下: 1 this is a test 2 Are you like awk 3

梁海江的博客 3149

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6894

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3494

【awk】输出不同列、左对齐or右对齐

输出第一列(左对齐) awk '{print $1}' 输出最后一列(右对齐) awk '{print $NF}' 输出倒数第二列(右对齐) awk '{print $(NF-1)}'

Shen_JiaoJiao的博客 2712

Codex API 直接集成指南:告别中转代理,构建稳定高效的 AI 应用

在 AI 应用开发中,API 集成是连接模型能力与业务逻辑的核心环节。其基本原理是通过 HTTP 协议,按照服务提供商定义的规范发送请求并解析响应,实现远程调用。标准化的 API 设计确保了跨平台和跨语言的互操作性,其技术价值在于提供了稳定、可控且可扩展的服务接入方式,是构建企业级智能应用的基础。在实际应用场景中,开发者常需集成如 Codex 这类聚合了多种大语言模型的平台,以调用诸如 DeepSeek 等先进模型。然而,部分开发者仍依赖过时的第三方中转代理工具,这不仅引入了单点故障和版本锁定的风险,还可能

weixin_28224217的博客 339

awk入门教程

awk不仅是一个数据处理工具,而且是一门解释性的编程语言。它提供了十分强大的功能:支持流程控制、数学运算符,内置函数等。但是大多数时候

a549654065的博客 1828

CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面

本文详细介绍了如何在CloudCompare中使用CSF地面滤波插件分离点云中的地面数据。通过解析布料模拟滤波算法的核心参数,如布料刚度和网格分辨率,并提供不同地形(城市、丘陵、山地)的适配策略,帮助用户高效处理复杂点云数据。文章还包含实战案例和优化技巧,确保滤波结果的精度和可靠性。

weixin_42548708的博客 221

在 Windows 上安装 OpenCV – C++ / Python

而且,安装并不是一件容易的事。这些安装程序仅适用于安装 OpenCV for C++。如果您想安装适用于 Python 的 OpenCV,您将在博客后面找到相关信息。在这篇博文中,我们将在 Windows 上安装适用于 C++ 和 Python 的 OpenCV。C++ 安装是在自定义安装 exe 文件的帮助下完成的。而Python的安装是通过Anaconda完成的。从源代码安装 OpenCV 需要花费大量时间。根据您的硬件和安装配置,该过程可能需要 5 分钟到 2 小时不等。

Demondai999的博客 2091

Linux三剑客—grep、awk、sed基础教程

Python3中的正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。 多数字母和数字前加一个反斜杠时会拥有不同的含义。 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。 反斜杠本身需要使用反斜杠转义。 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’\t’,等价于 ‘\t’)匹配相应的特殊字符。 下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参

星尘博客_优快云镜像 438

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南

本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。

ruby5的博客 1121

Linux文本三剑客超详细教程---grep、sed、awk

Linux文本三剑客超详细教程---grep、sed、awk   awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。 1、grep 1.1什么是grep和egrep   Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,.

会哭的雨@的博客 1178

【2023校招】网易雷火_研发岗_笔试题解

几个月没写题,果然水平不在线了hh,AK更难实现喽,当天只AK了疯狂游戏; 题目描述和数据等尽量多的CV到了DEVC里,可能不够细节和准确; 下面进入正题,分享我们此次笔试的题目描述和代码设计吧~.........

米莱虾 4544

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 317

Linux 三剑客之 awk 实战详解教程

Linux 三剑客之 awk 实战详解教程_Dream_xun的博客-优快云博客_linux wck

a15019524496的博客 86

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux三剑客——grep、awk、sed命令基本使用教程

目录一、前言1.1 Linux三剑客1.2 正则表达式二、grep命令三、awk命令四、sed命令五、写在最后 一、前言 1.1 Linux三剑客 1.2 正则表达式   在使用这三个命令中,基本都是以正则表达式为基础。在Linux中,正则表达式可以分为基本表达式和扩展表达式。 基本表达式^表示开头 $表示结尾 []表示任意匹配项 *表示0个或多个 .表示任意字符 扩展表达式?表示非贪婪匹配 + 表示一个或多个 () 表示分组 {} 表示一个范围的约束 | 表示匹配多个表达式中的

一个Tester的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux运维三剑客:sed、awk、grep 终极保姆级教程

本教程专为设计,从基础语法到高阶用法全面覆盖,包含和,手把手教你玩转Linux文本处理!

2403_88333522的博客 818

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

linux三剑客awk命令使用教程

与sed一样,均是一行一行的读取,处理sed作用于一整行的处理,而awk将一行分成数个字段来处理字段:一段字符串 --> 一段很多字符组成了一个字符串。

叶新东老师的博客 438

学习笔记 | Linux系列教程之文本三剑客 - awk、grep、sed从入门到实战

学习视频来源:B站《Linux系列教程之文本三剑客 - awk、grep、sed从入门到实战》 学习视频过程中,跟着老师一步步实践并整理的学习笔记,附上幕布笔记链接 https://share.mubu.com/doc/56BNDu2WbNT (持续学习中:最新更新于 2021年2月8日) ...

团爸讲算法 284
上一篇: ELK部署
下一篇: Apache和Nginx服务日志详解
郝1.
博客等级 码龄8年 805粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值