常用 awk 操作
NAME
awk: 文本和数据进行处理的编程语言
SYNOPSIS
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
OPTION && FORMAT
awk [options] 'script' var=value file(s) |
OPTIONS
-F
fs 指定输入分隔符, fs可以是字符串或正则表达式 默认的分隔符是连续的空格或制表符-v
var=value 赋值一个用户定义变量, 将外部变量传递给 awk-f
scriptfile 从脚本文件中读取 awk 命令
EXAMPLE
以 docker ps -a
的输出为例, 对输出结果清洗
1.获取第二行之后数据
docker ps -a | awk 'NR>1 {print}'
2.只获取第一列的数据和第五列的数据
docker ps -a | awk 'NR>1 {print $1, $5}'
3.可以看到 $5 取得的第五列并不一样, 因为默认情况下, awk 以空格分隔符, 但是空格的数量不确定.
因此, 我们自定义一下分割符号## 以三个空格为分割符
docker ps -a | awk -F " " 'NR>1 {print $1, $5}'## 至少三个连续空格为分割符
docker ps -a | awk -F "[[:space:]]{3,}" 'NR>1 {print $1, $5}'
ADVANCED
以 docker ps
的输出为例, 对输出结果清洗
输入分割符:
-v FS
输出分隔符:
-v OFS
指定输入分隔符为两个连续空格
## 以下两种写法一样
docker ps | awk -v FS=" " 'NR>1 {print $1, $2}'
docker ps | awk -F " " 'NR>1 {print $1, $2}'指定输出分隔符为连个连续*
docker ps | awk -v FS=" " -v OFS="**" 'NR>1 {print $1, $2}'