Linux学习之awk命令:从入门到精通

2、 awk命令基础语法3、 awk命令常用选项4、 awk模式匹配表达式5、 awk动作表达式6、 结语在Linux操作系统中,指定输入文件的分隔符。

在Linux操作系统中,awk是一种非常强大的文本处理工具。它可以用于对文件进行处理、分析和格式化输出,是Linux管理员和开发人员必须掌握的技能之一。本文将从入门到精通介绍awk命令的使用方法。

1. awk命令是什么?

awk是一种用于文本处理和数据提取的编程语言,它可以根据用户定义的规则对输入流进行分析并生成报告或执行某些任务。它最初由Alfred Aho、Peter Weinberger和Brian Kernighan在1977年开发出来,并以他们三个人名字首字母组成而得名。

2. awk命令基础语法

awk命令有一个基本的语法结构:

“`

awk ‘pattern {action}’ file

其中:

– pattern 为模式匹配表达式,用来控制对哪些行进行操作。

– action 为动作表达式,用来指定对匹配行要执行哪些操作。

– file 为要处理的文件名。

例如:

$ cat data.txt

Tom 20 male

Amy 18 female

Jack 21 male

$ awk ‘{print $1,$2*2}’ data.txt

Tom 40

Amy 36

Jack 42

上面的命令将data.txt文件中的第一列和第二列分别乘以2后输出。

3. awk命令常用选项

– -F:指定输入文件的分隔符。

– -v:定义一个变量并给它赋值。

– -f:从外部文件读取awk脚本。

$ awk -F’:’ ‘{print $1}’ /etc/passwd

root

bin

daemon

$ awk -v name=Tom ‘{print name ” is ” $2 ” years old.”}’ data.txt

Tom is 20 years old.

Tom is 18 years old.

Linux学习之awk命令:从入门到精通

Tom is 21 years old.

$ awk -f script.awk file.txt

4. awk模式匹配表达式

awk模式匹配表达式用来指定对哪些行进行操作。常见的模式匹配表达式如下:

| 表达式 | 描述 |

| — | — |

| /pattern/ | 匹配包含指定字符串pattern的行。|

| $n~ /pattern/ | 匹配第n个字段中包含指定字符串pattern的行。|

| ! /pattern/ | 匹配不包含指定字符串pattern的行。|

| BEGIN{} | 在处理输入之前执行一次,可以用来初始化变量等操作。|

| END{} | 在处理完所有输入之后执行一次,可以用来输出总结信息等操作。|

$ awk ‘/male/{print $1,$2*2}’ data.txt

$ awk ‘$2>20{print $0}’ data.txt

$ awk ‘!/female/{print $0}’ data.txt

$ awk ‘BEGIN{sum=0}{sum+=$2}END{print sum/NR}’ data.txt

19.6667

5. awk动作表达式

awk动作表达式用来指定对匹配行要执行哪些操作。常见的动作表达式如下:

| print | 输出整行或者指定字段。|

| printf | 格式化输出。|

| if/else | 条件语句,根据条件执行不同的操作。|

| while/do-while | 循环语句,根据条件重复执行某个操作。|

$ awk ‘{if($2>=20) print $1 ” is an adult.” else print $1 ” is a teenager.”}’ data.txt

Tom is an adult.

Amy is a teenager.

Jack is an adult.

$ awk ‘{i=1;while(i<=$2){printf("%s",$1);i++};printf("n")}' data.txt

Tom Tom Tom Tom Tom Tom Tom Tom Tom Tom

Amy Amy Amy Amy Amy Amy Amy Amy

Jack Jack Jack Jack Jack Jack Jack Jack Jack Jack

6. 结语

awk是Linux系统中一个非常实用的文本处理工具,在日常工作中经常会用到它来对文件进行格式化输出、数据提取等任务。掌握了awk的基本语法和常用表达式后,我们可以更加高效地处理文本数据。希望这篇文章能够对大家有所帮助。