Linux文本三剑客-awk

发布时间 2023-11-22 11:40:44作者: Demon丶安梓

详解

awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据转化成专业的Excel表的样式

awk基础

语法

awk [option] 'pattern[action]' file ...
awk  参数     '条件动作'          文件
  • action值得是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是printprintf

awk场景

动作场景

选项

  • awk常用参数
参数 解释
-v value,设置变量
-F filed separator,输入字段分隔符
  • awk常用内置变量
变量 变量全称 解释
$[n] number 第n个字段
$0 当前整条记录
FS filed separator, 输入字段分隔符
RS record separator, 输入记录分隔符
OFS output filed separator, 输出字段分隔符
ORS output record separator, 输出记录分隔符
NF number of fileds, 当前记录包含字段数
NR number of reccords, 当期已处理记录数
  • awk内置函数
函数 解释
print
printf
length 字段长度
BEGIN
END

BRGIN语句块--->模式匹配语句块--->END语句块

实验

简单输出

我们执行的命令是awk '{print $2}',没有使用参数和模式,$2表示输出文本的第二列信息
awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分隔符去工作,没有指定则默认空格

指定了分隔符,awk吧每一行切割后的数据对应到内置变量中

  • $0表示整行
  • $NF表示当前分割的最后一列
  • 倒数第二列可以写成$(NF-1)
# 输出lsblk的第七列
[root@localhost /]$ lsblk | awk '{print $7}'
MOUNTPOINT

/boot

/
/home
/var

# 配合grep命令输出一个非空白行
[root@localhost /]$ lsblk | awk '{print $7}' |grep -v '^$'
MOUNTPOINT
/boot
/
/home
/var