awk [选项] '模式 {动作}' 文件
参数解释:
选项:例如 -F 用于指定字段分隔符。
模式:可以是正则表达式、条件表达式等,用于筛选符合条件的行。
动作:是对匹配到的行执行的操作,通常包含打印、计算等命令。
文件:指定要处理的文本文件,如果不指定,则从标准输入读取数据。
常见用法及示例
(一)打印指定列
默认情况下,awk 使用空格或制表符作为字段分隔符,使用 $n 来引用第 n 个字段($1 表示第一个字段,$0 表示整行)。
bash# 示例文件 data.txt 内容如下
apple 10 2.5
banana 20 3.0
cherry 15 2.0
# 打印每行的第一个字段
awk '{print $1}' data.txt
输出结果:
apple
banana
cherry
(二)指定字段分隔符
使用 -F 选项可以指定不同的字段分隔符。
bash# 示例文件 data.csv 内容如下
apple,10,2.5
banana,20,3.0
cherry,15,2.0
# 指定逗号为分隔符,打印每行的第二个字段
awk -F ',' '{print $2}' data.csv
输出结果:
10
20
15
(三)条件筛选
可以使用条件表达式来筛选符合条件的行。
bash# 筛选出第二个字段大于 15 的行,并打印整行
awk '$2 > 15 {print $0}' data.txt
输出结果:
banana 20 3.0
(四)正则表达式匹配
使用正则表达式来匹配包含特定字符串的行。
bash# 打印包含 "banana" 的行
awk '/banana/ {print $0}' data.txt
输出结果:
banana 20 3.0
(五)内置变量
awk 有许多内置变量,如 NR(记录编号,即行号)、NF(字段数量)等。
bash# 打印每行的行号和字段数量
awk '{print "Line " NR ": " NF " fields"}' data.txt
输出结果:
Line 1: 3 fields
Line 2: 3 fields
Line 3: 3 fields
(六)计算和累加
可以在 awk 中进行计算和累加操作。
bash# 计算第二个字段的总和
awk '{sum += $2} END {print "Total: " sum}' data.txt
输出结果:
Total: 45
在这个例子中,sum += $2 用于累加每行的第二个字段的值,END 块在处理完所有行后执行,用于打印最终的总和。
注意:
1.使用单引号
2.awk后结的顺序不可以乱
3.第五点中内置变量,若引入除NR和NF,其他的需要用双引号
4.print一定在{}内
5.在 Linux 中使用 awk
计算含有 "mc"
的行数,可利用正则表达式匹配包含 "mc"
的行,再通过内置变量进行计数。以下为详细说明和示例:
awk '/mc/ {count++} END {print count}' example.txt
/mc/
:这是一个正则表达式,用于匹配包含"mc"
的行。只要某行包含"mc"
,就会触发后续动作。{count++}
:当匹配到包含"mc"
的行时,执行此动作,将变量count
的值加 1。一行中有两个mc时,也只会加1。END
:这是awk
的一个特殊模式,代表在处理完所有输入行后执行相应动作。{print count}
:在END
块中,打印计数器count
的最终值,也就是包含"mc"
的行数。
当然也可以配合输出重定向相机使用,如cat aaa.tcl | awk '{print $3}' | sort -u使用