Linux三剑客值awk命令详解

一、awk介绍

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

快速掌握awk的技巧:只要记住awk是以行为单位读入和输出的。

二、awk命令模式

-F 指定字段一个或多个分割符 例如:-F‘[:#/]‘   定义三个分隔符
-v 定义或修改一个awk内部的变量
NR 行号
RS 输入记录的分割,以分割符分割之后,使之成为新的行(即读入行的时候遇到指定分隔符,就把分割替换成\n)。
ORS 输出的记录分隔符,默认为新行。(即读入行的时候遇到\n之后把\n用指定的分隔符代替,然后读入一行,并合并为同一行)
$NF 表示最后一列
$0 显示当前一整行
$N N为数字,表示第几列。例如:$1表示用-F指定分隔符分隔后的第一列,$2...$N以此类推
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
~ 匹配字段,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
> 大于
< 小于
>= 大于等于
<= 小于等于
!=  不等于,精确比较
&& 逻辑与
|| 逻辑或
+ 匹配1个或1个以上
// 正则匹配符
print 输出、打印

三、使用演示

1、演示文本

[[email protected] data]# cat test.txt
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
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/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
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
wt:x:1000:1000:wt:/home/wt:/bin/bash
test2:x:1001:1001::/home/test2:/bin/bash

2、{}命令代码块及print的使用

?{}  代码块

?print   输入、打印内容

 1 [[email protected] data]# awk ‘{print}‘ test.txt
 2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 3 halt:x:7:0:halt:/sbin:/sbin/halt
 4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
 5 operator:x:11:0:operator:/root:/sbin/nologin
 6 games:x:12:100:games:/usr/games:/sbin/nologin
 7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 8 ntp:x:38:38::/etc/ntp:/sbin/nologin
 9 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
10 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
11 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
12 dbus:x:81:81:System message bus:/:/sbin/nologin
13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
14 nobody:x:99:99:Nobody:/:/sbin/nologin
15 abrt:x:173:173::/etc/abrt:/sbin/nologin
16 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
18 wt:x:1000:1000:wt:/home/wt:/bin/bash
19 test2:x:1001:1001::/home/test2:/bin/bash

3、NR的使用

?显示行号

[[email protected] data]# awk ‘{print NR}‘ test.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

?指定行号,与"=="一起使用(下列例如为显示文本第二行)

[[email protected] data]# awk ‘NR==2 {print}‘ test.txt
halt:x:7:0:halt:/sbin:/sbin/halt

4、$0的使用

?$0显示当前的一行

[[email protected] data]# awk ‘{print NR $0}‘ test.txt
1shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
2halt:x:7:0:halt:/sbin:/sbin/halt
3mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
4operator:x:11:0:operator:/root:/sbin/nologin
5games:x:12:100:games:/usr/games:/sbin/nologin
6ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7ntp:x:38:38::/etc/ntp:/sbin/nologin
8apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
9tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
10sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
11dbus:x:81:81:System message bus:/:/sbin/nologin
12postfix:x:89:89::/var/spool/postfix:/sbin/nologin
13nobody:x:99:99:Nobody:/:/sbin/nologin
14abrt:x:173:173::/etc/abrt:/sbin/nologin
15systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
16polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17wt:x:1000:1000:wt:/home/wt:/bin/bash
18test2:x:1001:1001::/home/test2:/bin/bash
19

5、-F与$N(N为数字)、$NF的使用

#例子说明:使用-F选项指定分隔符为":"冒号,输入切割后的$1(第一列)和$NF(最后一列)

1 [[email protected] data]# awk -F ":" ‘NR==2 {print $0}‘ test.txt
2 halt:x:7:0:halt:/sbin:/sbin/halt
3 [[email protected] data]# awk -F ":" ‘NR==2 {print $1,$NF}‘ test.txt
4 halt /sbin/halt

#例子说明:使用-F选项指定分隔符为" 0/"(空格、数字0、/),取出文件的权限644

 1 [[email protected] data]# stat test.txt
 2   File: ‘test.txt’
 3   Size: 891           Blocks: 8          IO Block: 4096   regular file
 4 Device: 802h/2050d    Inode: 3407880     Links: 1
 5 Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
 6 Access: 2018-09-30 19:04:00.755834056 +0800
 7 Modify: 2018-09-30 19:03:12.389575356 +0800
 8 Change: 2018-09-30 19:03:57.494833754 +0800
 9  Birth: -
10 [[email protected] data]# stat test.txt |awk -F "[ 0/]" ‘NR==4{print $3}‘
11 644

6、>=和<=的使用(其他运算法与之相同)

#例子说明:输出行号大于5的行

[[email protected] data]# awk ‘NR>=5{print NR,$0}‘ test.txt
5 games:x:12:100:games:/usr/games:/sbin/nologin
6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7 ntp:x:38:38::/etc/ntp:/sbin/nologin
8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
9 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
10 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
11 dbus:x:81:81:System message bus:/:/sbin/nologin
12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 abrt:x:173:173::/etc/abrt:/sbin/nologin
15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 wt:x:1000:1000:wt:/home/wt:/bin/bash
18 test2:x:1001:1001::/home/test2:/bin/bash
19 

#例子说明:输出行号小于5的行

[[email protected] data]# awk ‘NR<=5{print NR,$0}‘ test.txt
1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
2 halt:x:7:0:halt:/sbin:/sbin/halt
3 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
4 operator:x:11:0:operator:/root:/sbin/nologin
5 games:x:12:100:games:/usr/games:/sbin/nologin

7、&&与||的使用

#例子说明:输出行号大于5且小于10的行

[[email protected] data]# awk ‘NR>5 && NR<10 {print NR,$0}‘ test.txt
6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7 ntp:x:38:38::/etc/ntp:/sbin/nologin
8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
9 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

#例子说明:输出行号小于5或行号大于10的行

[[email protected] data]# awk ‘NR<5 || NR>10 {print NR,$0}‘ test.txt
1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
2 halt:x:7:0:halt:/sbin:/sbin/halt
3 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
4 operator:x:11:0:operator:/root:/sbin/nologin
11 dbus:x:81:81:System message bus:/:/sbin/nologin
12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 abrt:x:173:173::/etc/abrt:/sbin/nologin
15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 wt:x:1000:1000:wt:/home/wt:/bin/bash
18 test2:x:1001:1001::/home/test2:/bin/bash
19

8、//和~、+的使用

?//  使用正则匹配的格式,//中间放置匹配的内容

?~  匹配//中防止的内容

?+  匹配一个或者多个

例子说明:列出/etc/servicesx文件中(http|https|mysql|ssh|telnet|ftp)的端口号,由于/etc/service的文件内容每行有多个空格,所以使用"+"把多个空格和/合并为一个再进行切割。

可以看如下例子加"+"符号与不加"+"所使用的$N的N的数字为多少。

 1 [[email protected] ~]# awk -F "[ /]" ‘$1~/^(http|https|ssh)$/{print $0}‘ /etc/services
 2 ssh             22/tcp                          # The Secure Shell (SSH) Protocol
 3 ssh             22/udp                          # The Secure Shell (SSH) Protocol
 4 http            80/tcp          www www-http    # WorldWideWeb HTTP
 5 http            80/udp          www www-http    # HyperText Transfer Protocol
 6 http            80/sctp                         # HyperText Transfer Protocol
 7 https           443/tcp                         # http protocol over TLS/SSL
 8 https           443/udp                         # http protocol over TLS/SSL
 9 https           443/sctp                        # http protocol over TLS/SSL
10 ssh             22/sctp                 # SSH
11 [[email protected] ~]# awk -F "[ /]" ‘$1~/^(http|https|ssh)$/{print $1,$14}‘ /etc/services
12 ssh 22
13 ssh 22
14 http tcp
15 http udp
16 http sctp
17 https
18 https
19 https
20 ssh 22
21 [[email protected] ~]# awk -F "[ /]+" ‘$1~/^(http|https|ssh)$/{print $1,$2}‘ /etc/services
22 ssh 22
23 ssh 22
24 http 80
25 http 80
26 http 80
27 https 443
28 https 443
29 https 443
30 ssh 22

注意:不加"+"符号,从例子可以看到,虽然通过加大$N的N的数值,但是却不能使全部需要匹配的服务得到对应的端口号,这是因为每个服务名称与端口号之间空格的个数不一致所导致的(跟服务名的字符长度有关),导致每行的$N增加,而且每行增加的列数还不一样;加"+"符号的,可以看到所有匹配的服务都得到了对应的端口号,符号"+"使$N(N为数字)匹配得更精准,所有指定多个分隔符的时候建议使用符号"+"。

 9、RS的使用

  1 [[email protected] data]# awk ‘BEGIN{RS=":"}{print $0}‘ test.txt
  2 shutdown
  3 x
  4 6
  5 0
  6 shutdown
  7 /sbin
  8 /sbin/shutdown
  9 halt
 10 x
 11 7
 12 0
 13 halt
 14 /sbin
 15 /sbin/halt
 16 mail
 17 x
 18 8
 19 12
 20 mail
 21 /var/spool/mail
 22 /sbin/nologin
 23 operator
 24 x
 25 11
 26 0
 27 operator
 28 /root
 29 /sbin/nologin
 30 games
 31 x
 32 12
 33 100
 34 games
 35 /usr/games
 36 /sbin/nologin
 37 ftp
 38 x
 39 14
 40 50
 41 FTP User
 42 /var/ftp
 43 /sbin/nologin
 44 ntp
 45 x
 46 38
 47 38
 48
 49 /etc/ntp
 50 /sbin/nologin
 51 apache
 52 x
 53 48
 54 48
 55 Apache
 56 /usr/share/httpd
 57 /sbin/nologin
 58 tss
 59 x
 60 59
 61 59
 62 Account used by the trousers package to sandbox the tcsd daemon
 63 /dev/null
 64 /sbin/nologin
 65 sshd
 66 x
 67 74
 68 74
 69 Privilege-separated SSH
 70 /var/empty/sshd
 71 /sbin/nologin
 72 dbus
 73 x
 74 81
 75 81
 76 System message bus
 77 /
 78 /sbin/nologin
 79 postfix
 80 x
 81 89
 82 89
 83
 84 /var/spool/postfix
 85 /sbin/nologin
 86 nobody
 87 x
 88 99
 89 99
 90 Nobody
 91 /
 92 /sbin/nologin
 93 abrt
 94 x
 95 173
 96 173
 97
 98 /etc/abrt
 99 /sbin/nologin
100 systemd-network
101 x
102 192
103 192
104 systemd Network Management
105 /
106 /sbin/nologin
107 polkitd
108 x
109 999
110 998
111 User for polkitd
112 /
113 /sbin/nologin
114 wt
115 x
116 1000
117 1000
118 wt
119 /home/wt
120 /bin/bash
121 test2
122 x
123 1001
124 1001
125
126 /home/test2
127 /bin/bash

10、ORS的使用

 1 [[email protected] data]# cat test.txt
 2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 3 halt:x:7:0:halt:/sbin:/sbin/halt
 4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
 5 operator:x:11:0:operator:/root:/sbin/nologin
 6 games:x:12:100:games:/usr/games:/sbin/nologin
 7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 8 ntp:x:38:38::/etc/ntp:/sbin/nologin
 9 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
10 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
11 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
12 dbus:x:81:81:System message bus:/:/sbin/nologin
13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
14 nobody:x:99:99:Nobody:/:/sbin/nologin
15 abrt:x:173:173::/etc/abrt:/sbin/nologin
16 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
18 wt:x:1000:1000:wt:/home/wt:/bin/bash
19 test2:x:1001:1001::/home/test2:/bin/bash
20
21 [[email protected] data]# awk ‘BEGIN{ORS="="}{print $0}‘ test.txt
22 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=ntp:x:38:38::/etc/ntp:/sbin/nologin=apache:x:48:48:Apache:/usr/share/httpd:/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=dbus:x:81:81:System message bus:/:/sbin/nologin=postfix:x:89:89::/var/spool/postfix:/sbin/nologin=nobody:x:99:99:Nobody:/:/sbin/nologin=abrt:x:173:173::/etc/abrt:/sbin/nologin=systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin=polkitd:x:999:998:User for polkitd:/:/sbin/nologin=wt:x:1000:1000:wt:/home/wt:/bin/bash=test2:x:1001:1001::/home/test2:/bin/bash==

原文地址:https://www.cnblogs.com/wutao666/p/9732976.html

时间: 2024-12-08 10:51:19

Linux三剑客值awk命令详解的相关文章

Linux Shell学习--awk命令详解

(1).awk介绍 awk是由Alfred Aho .Peter Weinberger 和 Brian Kernighan于1977年开发的变成语言,awk是上述三位创建者姓的首字母. Awk的基本语法与c语言类似,如果对c语言很熟悉,那么学习awk编程也将事半功倍. Awk功能与sed相似,都是用来进行文本处理的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,在抽取信息的基础上,才能进行其他文本操作.   awk是一款设计用于数据流的工具.它颇有玩头的原因就在于可以对列和行进行操作

Linux三剑客之grep命令详解

先来小菜一碟: cat /etc/passwd | grep -c "/bin/bash$" 以上,用来统计/etc/passwd 文件中以/bin/bash结尾的用户个数. grep用来基于正则去实现行过滤的工具:它有很多衍生命令: egrep 扩展的grep,即默认使用扩展正则表达式的grep,更高级. fgrep 专用于文件行过滤的工具. grep命令格式:grep [option] pattern file        option表示选项,pattern 表示要匹配的模式,

1.12-linux三剑客之awk用法详解

1.12 linux三剑客之awk用法详解 内容: 1. awk执行过程 2. awk命令格式 3. awk用法 4. awk数组 第1章 awk执行过程 一直读取到文件的最后一行 第2章 awk '找谁{干啥}' '模式{动作}' 模式 pattern   动作  action 第3章 awk中什么可以作为模式 正则表达式 比较表达式    NR>10 范围模式 特殊模式BEGIN{}和END{} awk支持正则中的特殊符号 3.1 正则表达式 测试文件/server/files/reg.tx

Linux awk 命令详解

简介linux awk命令详解 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的

linux awk命令详解(都是常用命令)

原文:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它

Linux上的free命令详解

Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1          2          3    

awk命令详解二

awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 1.   调用awk: 第一种命令行方式,如: awk [-Field-separator] 'commands' input

awk 命令详解

awk 用法(使用入门) [转]linux awk命令详解 awk命令

Linux 系统下 ifconfig 命令详解

Linux系统下网卡网络配置详解 Ifconfig命令使LINUX核心知道软件回送和网卡这样一些网络接口,这样Linux就可以使用它们. 除了上面介绍的这些用法之外,ifconfig命令用来监控和改变网络接口的状态,并且还可以带上很多命令行参数.下面是一个ifconfig的通用调用语法: #ifconfig interface [[-net -host] address [parameters]] 其中interface是网络接口名:address是分配给指定接口的主机名或IP地址.这里使用的主