1、简介
awk
是一种强大的文本处理工具,特别适用于处理结构化的数据,如表格或日志文件。它是 “Aho, Weinberger, and Kernighan” 的缩写,这三位是 awk
的原始作者。awk
可以在命令行中使用,也可以编写脚本来进行复杂的文本处理和数据分析。
2、基本用法
awk
的基本语法如下:
awk [选项] [脚本] [输入文件]
-
选项
:控制awk
的行为。 -
脚本
:包含一个或多个awk
命令。 -
输入文件
:要处理的文件。如果未指定文件,sed
会从标准输入读取数据。
3、常用选项
-
-F
:指定字段分隔符。 -
-v
:定义变量。 -
-f
:从文件中读取脚本。
4、基本概念
-
记录: awk
将输入的每一行视为一个记录。 -
字段:每一行(记录)被分隔成多个字段,默认分隔符是空格或制表符。 -
模式:用于匹配记录的条件。 -
动作:对匹配的记录执行的操作。
5、实战示例
一、 基本用法
1、 打印文件的某一列
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk '{print $1}' file1.txt ### 将file1.txt文件中第一列打印出来。
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改。
2、 使用自定义分隔符
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk -F, '{print $2}' file1.txt ### 使用逗号作为字段分隔符,打印第2列字段
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
3、 计算列的总和
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk -F, '{sum += $2} END {print sum}' file1.txt ### 计算第二列的总和,并打印出来
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
4、 条件过滤
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk -F, '$2 > 100 {print $0}' file1.txt ### 打印第二列大于100的行
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
5、 多条件过滤
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk -F, '$2 > 100 && $3 == "red" {print $0}' file1.txt ### 打印第二列大于100,且第三列是red的行
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
6、 定义变量
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk -v var="hello,world!" -F, '{print var, $1}' file1.txt ### 定义变量 var 并打印 file1.txt 文件的第一列和变量值。
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
7、 复杂脚本
[root@localhost ~]# ls -l ### 列出当前目录的文件
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容
[root@localhost ~]# awk 'BEGIN {FS=","; OFS=":"} {print $1, $2, $3}' file1.txt ### 使用逗号作为输入分隔符,冒号作为输出分隔符,打印 file1 文件的第一、第二和第三列。
[root@localhost ~]# cat file1.txt ### 查看file1.txt的内容,实际并未修改
原文始发于微信公众号(奶嘴很忙):awk – 文本处理工具
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/303662.html