Shell四剑客Awk

awk

格式:
awk -选项 ' 动作 ' 文件名 (动作外面要用单引号)
主要选项:
-f : 接文件
-F : 字段格式(格式化)
-v :变量

动作默认是打印

$NF(或者NF) ---最后一列
$(NF-1)--倒数第二列
NR:当前行数(行号),例如 
a
b
c
开始 NR==2  代表第二行(b这行)常用句式awk '{if (NR=2) print $1}' 意思是输入第二行的第一个参数

例:df -h 输出了磁盘信息后在 把已使用这一列打印并且在其前面加一个字符串“dIsk”


image.png
1.df -h |awk '{print "Disk:" $5 }'
2.df -h|awk '{print $5}'|sed 's/^/&Disk:/g'
结果:
Disk:已用%
Disk:48%
Disk:0%
Disk:0%
Disk:11%
Disk:0%
Disk:40%
Disk:0%

其中 awk 不加选项默认是打印,打印出第5列,在sed (s查找,^表示以什么开头,后面不加字符就是表示开头,&代表添加,在开头添加disk:,全局)

例2:分别打印1.txt 的3到5行,3行和5行

[root@server-1 awk]# cat -n 1.txt 
     1  jenkins:x:991:987:Jenkins Automation Server:/var/lib/jenkins:/bin/false
     2  zarafa:x:990:986:Zarafa Service Account:/var/lib/zarafa:/sbin/nologin
     3  ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
     4  mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
     5  ty1:x:1002:1002::/home/ty1:/bin/bash
awk 'NR==3,NR==5' 1.txt (打印3-5行,NR表示行数)
结果:
ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
ty1:x:1002:1002::/home/ty1:/bin/bash

awk 'NR==3;NR==5' 1.txt (打印3行和5行)
结果:
ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
ty1:x:1002:1002::/home/ty1:/bin/bash

扩展:如果要打印结果里的用户名:

awk -F ':' 'NR==3,NR==5 {print $1}' 1.txt
结果:
ftpuser
mysql
ty1

例3:引用变量(字符数为6的行打印下来 再其前加入11111,引用变量。$0代表匹配部分全部打印)

[root@server-1 awk]awk -v a=11111 'length($0)==6 {print a$0}' 1.txt 
11111a12345
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容