Rootop 服务器运维与web架构

awk的几个常用用法

以passwd文件中的2行测试:
[root@rootop ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

# 默认awk以空格或制表符做为分隔符,通过-F可以指定分隔符
格式:
awk -F '分隔符' # 单引号、双引号都可以

[root@rootop ~]# cat passwd  | awk -F ":" '{print $1}' # 通过stdin标准输入做为要处理的数据
root
bin

[root@rootop ~]# awk -F ":" '{print $1}' passwd # 通过指定文件做为要处理的数据
root
bin

$1为打印分隔后的第几列

# 通过打印 NF 变量可以看到有几列
[root@rootop ~]# awk -F ":" '{print NF}' passwd 
7
7

# 通过打印 NF 列可以打印最后一列
[root@rootop ~]# awk -F ":" '{print $NF}' passwd 
/bin/bash
/sbin/nologin

# 打印倒数第二列
[root@rootop ~]# awk -F ":" '{print $(NF-1)}' passwd 
/root
/bin

# 打印第一列并打印倒数第二列组成一行
[root@rootop ~]# awk -F ":" '{print $1$(NF-1)}' passwd 
root/root
bin/bin

# 如果中间想加个字符串可能会想到这么做
[root@rootop ~]# awk -F ":" '{print $1 "string" $(NF-1)}' passwd 
rootstring/root
binstring/bin

可以看到是连接在一起,没有分隔(第一列、字符串、第二列之间没有空格)

# 正确方法用逗号隔开,逗号表示添加空格
[root@rootop ~]# awk -F ":" '{print $1,"string",$(NF-1)}' passwd 
root string /root
bin string /bin

# 计算长度
[root@rootop ~]# awk -F ":" '{print length($1)}' passwd 
4
3

# 过滤结果 通过{}花括号外的 /条件/ 实现过滤
[root@rootop ~]# awk -F ":" '/ro/ {print $1}' passwd 
root

类似于用grep过滤结果
[root@rootop ~]# awk -F ":" '{print $1}' passwd | grep ro
root

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4286.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。