Shell脚本之awk用法

一、语法
awk是一种可以处理数据、产生格式化报表的语言,功能十分强大。awk认为文件中的每一行是一条记录,记录与记录的分隔符为换行符,每一列是一个字段,字段与字段的分隔符默认是一个或多个空格或tab制表符。
awk的工作方式是读取数据,将每一行数据视为一条记录(record),每条记录以字段分隔符分成若干字段,然后输出各个字段的值。
awk语法:

awk [options] [BEGIN]{program} [END][file]
常用命令选项:
-F fs:指定描绘一行中数据段的文件分隔符,默认为空格
-f file:指定读取程序的文件名
-v var=value:定义awk程序中使用的变量和默认值

注意:awk程序脚本由左大括号和右大括号定义。脚本命令必须放置在两个大括号之间。由于awk命令假定脚本是单文本字

awk程序运行优先级是:
1) BEGIN:在开始处理数据流之前执行, 可选项
2) program:如何处理数据流, 必选项
3) END: 处理完数据流后执行,可选项

二、awk的基本用法 — awk数据提取功能

> cat test
1 the quick brown fox jumps over the lazy cat . dog
2 the quick brown fox jumps over the lazy cat . dog
3 the quick brown fox    jumps over the lazy cat . dog
4 the quick brown fox jumps over the lazy cat . dog
5 the quick brown fox jumps over the lazy cat . dog 

2.1 awk对字段(列)的提取
字段提取:提取一个文本中的一列数据并打印输出
字段相关内置变量:
$0 : 表示整行文本
$1 : 表示文本行中的第一个数据字段
$2 : 表示文本行中的第二个数据字段
$N : 表示文本行中的第N个数据字段
$NF:表示文本行中的最后一个数据字段

# 1. 打印全文本
> awk '{print $0}' test
# 输出
1 the quick brown fox jumps over the lazy cat . dog
2 the quick brown fox jumps over the lazy cat . dog
3 the quick brown fox    jumps over the lazy cat . dog
4 the quick brown fox jumps over the lazy cat . dog
5 the quick brown fox jumps over the lazy cat . dog 

# 2. 打印第三列
> awk '{print $3}' test
# 输出
quick
quick
quick
quick
quick

# 3. 打印最后一列
> awk '{print $NF}' test
# 输出
dog
dog
dog
dog
dog

2.2 awk 对记录(行)的提取
记录提取:提取一个文本中的一行并打印输出
记录的提取方法有两种:a、通过行号 b、通过正则匹配
记录相关内置变量:
NR:指定行号

# 1. 打印第三行的所有数据
awk 'NR==3{print $0}' test
# 输出
3 the quick brown fox    jumps over the lazy cat . dog

# 2. 指定分隔符,打印第一行,第一列数据
> awk -F ":" 'NR==1{print $1}' /etc/passwd
# 输出
root

# 2. 指定分隔符,打印第一行,第一、三、五列
> awk -F ":" 'NR==1{print $1,$3,$5}' /etc/passwd
# 输出
root 0 root

# 3. 指定分隔符, 打印第一行,第一、三、五列,中间用分隔符'-'隔开
> awk -F ":" 'NR==1{print $1 "-" $3 "-" $5}' /etc/passwd
# 输出
root-0-root

# 4. 带格式输出
> awk -F ":" 'NR==1{print "account: "$1,"UID: "$3,"DESC: "$5}' /etc/passwd
# 输出
account: root UID: 0 DESC: root

# 5. 示例
> head -3 /proc/meminfo | awk 'NR==1{print $2}'

你可能感兴趣的:(Shell,shell,awk)