Linux三剑客之awk命令详解
一、awk介绍
AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
快速掌握awk的技巧:只要记住awk是以行为单位读入和输出的。
二、awk常用选项和命令
-F | 指定字段一个或多个分割符 例如:-F'[:#/]' 定义三个分隔符 |
-v | 定义或修改一个awk内部的变量 |
NR | 行号 |
FS | 字段的分隔符,默认为空格,跟-F选择一样 |
OFS | 输出的字段分隔符,默认为空格(即把空格替换成指定的字符串) |
RS | 输入记录的分割,以分割符分割之后,使之成为新的行(即读入行的时候遇到指定分隔符,就把分割替换成\n)。 |
ORS | 输出的记录分隔符,默认为新行。(即读入行的时候遇到\n之后把\n用指定的分隔符代替,然后读入一行,并合并为同一行) |
$NF | 表示最后一列 |
$0 | 显示当前一整行 |
$N | N为数字(N>0),表示第几列。例如:$1表示用-F指定分隔符分隔后的第一列,$2...$N以此类推 |
{} | 命令代码块,包含一条或多条命令 |
; | 多条命令使用分号分隔 |
~ | 匹配字段,与==相比不是精确比较 |
!~ | 不匹配,不精确比较 |
== | 等于,必须全部相等,精确比较 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于,精确比较 |
&& | 逻辑与 |
|| | 逻辑或 |
+ | 匹配1个或1个以上 |
// | 正则匹配符 |
输出、打印 |
三、AWK的选项
选项 | 描述 |
-f progfile --file=progfile |
从脚本文件中读取awk命令 |
-F fs --field-separator=fs |
指定字段一个或多个分割符 例如:-F'[:#/]' 定义三个分隔符 |
-v var=val --assign var=val |
定义或修改一个awk内部的变量 |
-b --characters-as-bytes |
将所有输入数据视为单字节字符。posix选项或覆盖这个选项 |
-c --traditional |
在兼容模式下运行。在兼容模式下,gawk的行为与UNIX awk相同;没有一个可以识别特定于gn的扩展 |
-C --copyright |
在标准输出和退出中成功打印GNU版权信息消息的简短版本 |
-d[file] --dump-variables[=file] |
将全局变量的排序列表、它们的类型和最终值打印到文件中。如果没有提供文件,gawk使用一个名为awkvars的文件 |
-e 'program-text' --source='program-text' |
使用程序文本作为AWK程序源代码。这个选项允许轻松地将库函数(通过-f和-file选项使用)与在命令行中输入的源代码混合使用。它主要用于shell脚本中使用的中型到大型AWK程序 |
-E file --exec=file |
与-f类似,这是最后一个处理的选项。这应该与#一起使用!脚本,特别是为CGI应用程序,以避免从URL向命令行传递选项或源代码(!)。这个选项禁止命令行变量赋值 |
-g --gen-pot |
扫描和解析AWK程序,并在标准输出上生成GNU .pot(可移植对象模板)格式文件,其中包含程序中所有可本地化字符串的条目。程序本身没有执行。 |
-h --help |
简短的打印帮助 |
-L [fatal] --lint[=fatal] |
提供关于可疑或不可移植到其他AWK实现的构造的警告 |
-n --non-decimal-data |
识别输入数据中的八进制和十六进制值 |
-N --use-lc-numeric |
使用句点作为小数点 |
-O --optimize |
在程序的内部表示上启用优化。目前,这包括简单的常数合并 |
-p[file] --profile[=file] |
将分析数据发送到PROFIX文件。默认值是DouthPo.OUT |
-P --posix |
启动兼容模式;将有如下限制: |
-r --re-interval | 允许在正则表达式匹配中使用区间表达式 |
-R --command file | 只有DGAWK。从文件读取存储的调试器命令 |
-S --sandbox |
在沙盒模式下运行GOWK,禁用Stand()函数,用GETLIN输入重定向,输出Read打印和打印的方向,并加载动态扩展。命令执行(通过管道)也被禁用。这有效地阻止了脚本访问本地资源(除了 |
-t --lint-old | 提供对UNIX AWK原始版本不可移植的结构的警告 |
-V --version | 打印AWK的版本信息 |
四、AWK的环境变量
变量 | 描述 |
$N | N为数字(N>0),表示第几列。例如:$1表示用-F指定分隔符分隔后的第一列,$2...$N以此类推 |
$0 | 显示当前一整行 |
$NF | 表示最后一列 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字转换格式(默认值为%.6g) |
ENVIRON | 环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
NR | 行号(当前记录数) |
FNR | 同NR,但相对于当前文件 |
FS | 字段的分隔符,默认为空格,跟-F选择一样 |
OFS | 输出的字段分隔符,默认为空格(即把空格替换成指定的字符串) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
NF | 当前记录中的字段数 |
OFMT | 数字的输出格式(默认值是%.6g) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 输入记录的分割,以分割符分割之后,使之成为新的行(即读入行的时候遇到指定分隔符,就把分割替换成\n(默认是\n)) |
ORS | 输出的记录分隔符,默认为新行。(即读入行的时候遇到\n之后把\n用指定的分隔符代替,然后读入一行,并合并为同一行)(默认值是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是\034) |
五、AWK的运算符
运算符 | 描述 |
= += -= *= /= %= ^= **= | 赋值 |
条件表达式?值1:值2 | 三目运算符 |
|| | 逻辑或 |
&& | 逻辑与 |
~ ~! | 匹配正则表达式和不匹配正则表达式 |
< <= > >= != == | 关系运算符 |
空格 | 连接符 |
+ - | 加,减 |
* / % | 乘,除与求余 |
+ - ! | 一元加,减和逻辑非 |
^ *** | 幂运算符 |
++ -- | 增加或减少,作为前缀或后缀 |
$ | 字段引用 |
in | 数组成员 |
六、AWK的内置的字符串函数
函数名称 | 描述 |
gsub(r,s) | 在整个$0中用s代替r |
gsub(r,s,t) | 在整个t中用s替代r |
index(s,t) | 返回s中字符串t的第一位置 |
length(s) | 返回s长度 |
match(s,r) | 测试s是否包含匹配r的字符串 |
split(s,a,fs) | 在fs上将s分成序列a |
sprint(fmt,exp) | 返回经fmt格式化后的exp |
sub(r,s) | 用$0中最左边最长的子串代替s |
substr(s,p) | 返回字符串s中从p开始的后缀部分 |
substr(s,p,n) | 返回字符串s中从p开始长度为n的后缀部分 |
七、AWK使用演示
1、演示文本
[root@WT data]# cat test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
2、{}命令代码块及print的使用
•{} 代码块
•print 输入、打印内容
[root@WT data]# awk '{print}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
3、NR的使用
•显示行号
[root@WT data]# awk '{print NR}' test.txt
•指定行号,与"=="一起使用(下列例如为显示文本第二行)
[root@WT data]# awk 'NR==2 {print}' test.txt
halt:x:::halt:/sbin:/sbin/halt
4、$0的使用
•$0显示当前的一行
[root@WT data]# awk '{print NR $0}' test.txt
1shutdown:x:::shutdown:/sbin:/sbin/shutdown
2halt:x:::halt:/sbin:/sbin/halt
3mail:x:::mail:/var/spool/mail:/sbin/nologin
4operator:x:::operator:/root:/sbin/nologin
5games:x:::games:/usr/games:/sbin/nologin
6ftp:x:::FTP User:/var/ftp:/sbin/nologin
7ntp:x::::/etc/ntp:/sbin/nologin
8apache:x:::Apache:/usr/share/httpd:/sbin/nologin
9tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
10sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
11dbus:x:::System message bus:/:/sbin/nologin
12postfix:x::::/var/spool/postfix:/sbin/nologin
13nobody:x:::Nobody:/:/sbin/nologin
14abrt:x::::/etc/abrt:/sbin/nologin
15systemd-network:x:::systemd Network Management:/:/sbin/nologin
16polkitd:x:::User for polkitd:/:/sbin/nologin
17wt:x:::wt:/home/wt:/bin/bash
18test2:x::::/home/test2:/bin/bash
5、-F与$N(N为数字)、$NF的使用
#例子说明:使用-F选项指定分隔符为":"冒号,输入切割后的$1(第一列)和$NF(最后一列)
[root@WT data]# awk -F ":" 'NR==2 {print $0}' test.txt
halt:x:::halt:/sbin:/sbin/halt
[root@WT data]# awk -F ":" 'NR==2 {print $1,$NF}' test.txt
halt /sbin/halt
#例子说明:使用-F选项指定分隔符为" 0/"(空格、数字0、/),取出文件的权限644
[root@WT data]# stat test.txt
File: ‘test.txt’
Size: Blocks: IO Block: regular file
Device: 802h/2050d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::00.755834056 +
Modify: -- ::12.389575356 +
Change: -- ::57.494833754 +
Birth: -
[root@WT data]# stat test.txt |awk -F "[ 0/]" 'NR==4{print $3}'
6、>=和<=的使用(其他运算法与之相同)
#例子说明:输出行号大于5的行
[root@WT data]# awk 'NR>=5{print NR,$0}' test.txt
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
#例子说明:输出行号小于5的行
[root@WT data]# awk 'NR<=5{print NR,$0}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
7、&&与||的使用
#例子说明:输出行号大于5且小于10的行
[root@WT data]# awk 'NR>5 && NR<10 {print NR,$0}' test.txt
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
#例子说明:输出行号小于5或行号大于10的行
[root@WT data]# awk 'NR<5 || NR>10 {print NR,$0}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
8、//和~、+的使用
•// 使用正则匹配的格式,//中间放置匹配的内容
•~ 匹配//中防止的内容
•+ 匹配一个或者多个
例子说明:列出/etc/servicesx文件中(http|https|mysql|ssh|telnet|ftp)的端口号,由于/etc/service的文件内容每行有多个空格,所以使用"+"把多个空格和/合并为一个再进行切割。
可以看如下例子加"+"符号与不加"+"所使用的$N的N的数字为多少。
[root@WT ~]# awk -F "[ /]" '$1~/^(http|https|ssh)$/{print $0}' /etc/services
ssh /tcp # The Secure Shell (SSH) Protocol
ssh /udp # The Secure Shell (SSH) Protocol
http /tcp www www-http # WorldWideWeb HTTP
http /udp www www-http # HyperText Transfer Protocol
http /sctp # HyperText Transfer Protocol
https /tcp # http protocol over TLS/SSL
https /udp # http protocol over TLS/SSL
https /sctp # http protocol over TLS/SSL
ssh /sctp # SSH
[root@WT ~]# awk -F "[ /]" '$1~/^(http|https|ssh)$/{print $1,$14}' /etc/services
ssh
ssh
http tcp
http udp
http sctp
https
https
https
ssh
[root@WT ~]# awk -F "[ /]+" '$1~/^(http|https|ssh)$/{print $1,$2}' /etc/services
ssh
ssh
http
http
http
https
https
https
ssh
注意:不加"+"符号,从例子可以看到,虽然通过加大$N的N的数值可以获取到端口号,但是却不能使全部需要匹配的服务得到对应的端口号,这是因为-F选项指定的空格分隔符是一个一个匹配,而默认的awk命令是以空格+匹配空格,所以第二个例子指定[空格/]+就可以是所需查询的服务截取出端口了。
9、if( 条件){ 符合条件之后执行的语句 } else { 条件不成立时执行的语句 } AWK的流程控制语句 注意,如果执行语句不用{ }符号括起来,那么在后面加";"分号
[root@WT data]# awk '{if(NR%2==0){print NR,$0} else if(NR==19){print "我是空行"} else{print "我是奇数行"}}' test.txt
我是奇数行
halt:x:::halt:/sbin:/sbin/halt
我是奇数行
operator:x:::operator:/root:/sbin/nologin
我是奇数行
ftp:x:::FTP User:/var/ftp:/sbin/nologin
我是奇数行
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
我是奇数行
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
我是奇数行
postfix:x::::/var/spool/postfix:/sbin/nologin
我是奇数行
abrt:x::::/etc/abrt:/sbin/nologin
我是奇数行
polkitd:x:::User for polkitd:/:/sbin/nologin
我是奇数行
test2:x::::/home/test2:/bin/bash
我是空行
[root@WT data]# awk '{if(NR%2==0) print NR,$0; else if(NR==19) print "我是空行";else print "我是奇数行";}' test.txt
我是奇数行
halt:x:::halt:/sbin:/sbin/halt
我是奇数行
operator:x:::operator:/root:/sbin/nologin
我是奇数行
ftp:x:::FTP User:/var/ftp:/sbin/nologin
我是奇数行
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
我是奇数行
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
我是奇数行
postfix:x::::/var/spool/postfix:/sbin/nologin
我是奇数行
abrt:x::::/etc/abrt:/sbin/nologin
我是奇数行
polkitd:x:::User for polkitd:/:/sbin/nologin
我是奇数行
test2:x::::/home/test2:/bin/bash
我是空行
10、BEGIN { 初始化某些变量 } { 根据初始化的变量执行语句 } END { 结束之后执行的语句 }
语句说明:BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
[root@WT data]# wc -l test.txt
test.txt
[root@WT data]# awk 'BEGIN{i=1}{i+=1}END{print i}' test.txt
12、while循环
例子说明:让演示文本每行语句输出两次
[root@WT data]# awk '{i=1;while(i<=2){print $0;i+=1}}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
test2:x::::/home/test2:/bin/bash
13、do-while循环
[root@WT data]# awk '{i=1;do{print $0;i+=1}while(i<1)}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
14、RS的使用
[root@WT data]# awk 'BEGIN{RS=":"}{print $0}' test.txt
shutdown
x shutdown
/sbin
/sbin/shutdown
halt
x halt
/sbin
/sbin/halt
x mail
/var/spool/mail
/sbin/nologin
operator
x operator
/root
/sbin/nologin
games
x games
/usr/games
/sbin/nologin
ftp
x FTP User
/var/ftp
/sbin/nologin
ntp
x /etc/ntp
/sbin/nologin
apache
x Apache
/usr/share/httpd
/sbin/nologin
tss
x Account used by the trousers package to sandbox the tcsd daemon
/dev/null
/sbin/nologin
sshd
x Privilege-separated SSH
/var/empty/sshd
/sbin/nologin
dbus
x System message bus
/
/sbin/nologin
postfix
x /var/spool/postfix
/sbin/nologin
nobody
x Nobody
/
/sbin/nologin
abrt
x /etc/abrt
/sbin/nologin
systemd-network
x systemd Network Management
/
/sbin/nologin
polkitd
x User for polkitd
/
/sbin/nologin
wt
x wt
/home/wt
/bin/bash
test2
x /home/test2
/bin/bash
15、ORS的使用
[root@WT data]# cat test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash [root@WT data]# awk 'BEGIN{ORS="="}{print $0}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown=halt:x:::halt:/sbin:/sbin/halt=mail:x:::mail:/var/spool/mail:/sbin/nologin=operator:x:::operator:/root:/sbin/nologin=games:x:::games:/usr/games:/sbin/nologin=ftp:x:::FTP User:/var/ftp:/sbin/nologin=ntp:x::::/etc/ntp:/sbin/nologin=apache:x:::Apache:/usr/share/httpd:/sbin/nologin=tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin=sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin=dbus:x:::System message bus:/:/sbin/nologin=postfix:x::::/var/spool/postfix:/sbin/nologin=nobody:x:::Nobody:/:/sbin/nologin=abrt:x::::/etc/abrt:/sbin/nologin=systemd-network:x:::systemd Network Management:/:/sbin/nologin=polkitd:x:::User for polkitd:/:/sbin/nologin=wt:x:::wt:/home/wt:/bin/bash=test2:x::::/home/test2:/bin/bash==
16、FS的使用
[root@WT data]# awk 'BEGIN{FS=":"}{print $1}' test.txt
shutdown
halt
operator
games
ftp
ntp
apache
tss
sshd
dbus
postfix
nobody
abrt
systemd-network
polkitd
wt
test2
17、OFS的使用
[root@WT data]# echo "1 2"|awk 'BEGIN{OFS="&"}{$1=$1;print $0}'
&
18、for循环的使用
格式:
for(初始表达式;终止条件;步长表达式)
{语句}
例子说明:把演示文本的每行语句输出两次
[root@WT data]# awk '{for(i=0;i<2;i++){print $0}}' test.txt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
apache:x:::Apache:/usr/share/httpd:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
wt:x:::wt:/home/wt:/bin/bash
wt:x:::wt:/home/wt:/bin/bash
test2:x::::/home/test2:/bin/bash
test2:x::::/home/test2:/bin/bash
19、AWK的数组使用
#awk数组简单使用
[root@WT ~]# awk 'BEGIN{arr[0]="hello world";arr[1]="hello world2";for(i in arr)print arr[i]}'
hello world
hello world2
[root@WT ~]# awk 'BEGIN{arr[0]="hello world";arr[1]="hello world2";for(i=0;i<length(arr);i++)print arr[i]}'
hello world
hello world2
#统计IP数量
[root@WT data]# cat test2.txt
10.0.0.5
10.0.0.2
10.0.0.2
10.0.0.1
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.8
10.0.0.7
10.0.0.4
10.0.0.6
10.0.0.19
10.0.0.1
10.0.0.1
[root@WT data]# awk '{arr[$1]++} END {for(key in arr) print arr[key],key}' test2.txt |sort -nr
10.0.0.1
10.0.0.5
10.0.0.4
10.0.0.2
10.0.0.8
10.0.0.7
10.0.0.6
10.0.0.3
10.0.0.19
Linux三剑客之awk命令详解的更多相关文章
- Linux 三剑客之 awk 实战详解教程
我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- linux awk命令详解,使用system来内嵌系统命令, awk合并两列
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- Shell学习(五)—— awk命令详解
一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...
- Linux上的free命令详解、swap机制
Linux上的free命令详解 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...
- Linux CAT与ECHO命令详解 <<EOF EOF
Linux CAT与ECHO命令详解 cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的: cat主要有三大功能: .一次显示整个文件. $ cat filename .从键盘 ...
- [r]Ubuntu Linux系统下apt-get命令详解
Ubuntu Linux系统下apt-get命令详解(via|via) 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
随机推荐
- Vue学习之Vue模拟后台数据
前后端项目的开发,需要前端和后端同时进行开发,有时后端开发人员还未完成API接口可以提供给前端调用,因此就需要模拟前端请求后端接口,后端返回数据.一般开发中都是返回json数据格式来完成前后端的交互. ...
- HashSet源码学习,基于HashMap实现
HashSet源码学习 一).Set集合的主要使用类 1). HashSet 基于对HashMap的封装 2). LinkedHashSet 基于对LinkedHashSet的封装 3). TreeS ...
- 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)
转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...
- Java流程控制之(一)条件
目录 条件语句 单if情况 单if/else情况 if/else多分支情况 switch条件语句 条件语句+循环语句,直接甩图甩代码! 条件语句 Java希望在某个条件为真时执行相应的语句. 单if情 ...
- Linux\CentOS MySql 安装与配置
一.MySQL 简介 MySQL 是一个关系型数据库管理系统,是MySQL AB公司开发,现在属于 Oracle 旗下产品. MySQL 采用标准化语言.体积小.速度快.成本低.开源等特点使得一些中小 ...
- jqery 动态添加元素 绑定事件
jQuery动态添加元素: var url = "...";//服务地址 $.ajax({ type: 'post', url: url, data:{fireId:fireId} ...
- day20191106
笔记: 一.#{}和${}的区别是什么 1)#{}是预编译处理,${}是字符串替换.2)Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 ...
- Spring(Bean)5
spel <bean id="address" class="com.atguigu.spring.beans.spel.Address"> < ...
- 点击查看大图滑动预览(h5,pc通用)
点击预览大图并滑动观看,支持手机端和pc端,具体功能如下图: 一. touchTouch 的js和css 以及jquery依赖库 <link rel="stylesheet" ...
- mysql那些事(5)建表存储引擎的选择
在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写 ...