Linux三剑客之AWK(1)

        awk是一个维护和处理文本数据文件的强大语言。在处理有一定格式的数据时,即每行数据包含多个以分界符分隔的字段时,尤其有用。awk也可以没有输入文件,那不是必须的。

1.awk命令语法

        awk -Fs '/pattern/{action}' input-file

        或

        awk -Fs '{action}' input-file

                - F为指定字段分界符。如果不指定,默认空格作为分界符。

                /pattern/和{action}需要用单引号引起来。

                /pattern/是可选的。如何不指定,awk将处理输入文件中的所有记录。

                {action}为awk命令,可以是单个命令,也可以多个命令。

                input-file即为要处理的文件。

      1.1 .把awk命令放入单独的文件中(awk脚本)

       当需要执行很多awk命令时,可以把/pattern/{action}这一部分放到单独的文件中,然后调用它: 

        awk -Fs -f myscript.awk input-file

        myscript.awk可以使用任意扩展名(也可以不用)。但是加上扩展名.awk更加直观和便于维护,也可以在这个文件中设置字段分界符,然后调用:

        awk -f myscript.awk input-file

2.awk程序结构(BEGIN,body,END)区域

        1.BEGIN区域

        语法:BEGIN {awk-commands}

        BEGIN区域的命令只最开始在awk执行body区域命令之前执行一次。

        BEGIN 区域适合用来打印报文头部信息,以及初始化变量。

        BEGIN区域可以有一个或多个awk命令

        必须要大写

        BEGIN区域是可选的

        2.body区域

        语法:/pattern/{action}

        body区域命令每次从输入文件读取一行就会执行一次

        如果输入文件有10行,那body区域的命令就会执行10次(每行执行一次)

        body区域没有用任何关键字表示,只有用正则模式和命令

        3.END区域

        语法:END {awk-commands}

        END区域在awk执行完所有操作后执行,并且只执行一次

        END区域适合打印报文结尾信息,以及做一些清理动作

        END区域可以有一个或多个awk命令

        关键字END必须要用大写

        END区域可选

        实例:

# vim mytest.awk
# cat mytest.awk
BEGIN{
FS=":"
print "---header---"
}
/mail/{
print $1
}
END{
print"---footer---"
}
# awk -f mytest.awk /etc/passwd
---header---
mail
---footer---

        只有body区域:

# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network

        只有BEGIN区域:

# awk 'BEGIN{print "hello world!"}'
hello world!

        只包含BEGIN和body区域:

# awk -F: 'BEGIN{print "UID"}{print $3}' /etc/passwd
UID
0
1
2
3
4
5
6
7
8

        输入多个文件:

        awk可以指定多个输入文件,如果指定了两个文件,body区域会首先在第一个文件的所有行上执行,然后在第二个文件的所有行上执行。

# awk 'BEGIN{FS=":";print"---header---"}\
> /mail/{print $1}\
>
> END{print"---footer---"}' /etc/passwd /etc/group

3.打印命令        

        awk的打印命令print(不带参)会打印整行数据。

# awk '{print}' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
# awk '{print $2}' employee.txt
Doe,CEO
Smith,IT
Reddy,Sysadmin
Ram,Developer
Miller,Sales

        可见默认分隔符为空格

4.模式匹配

        打印管理者的姓名和职位:

# awk -F',' '/Manager/{print $2,$3}' employee.txt
Jason Smith IT Manager
Jane Miller Sales Manager

        只打印雇员id为102的信息:

# awk -F',' '/^102/{print "Emp id 102 is",$2}' employee.txt
Emp id 102 is Jason Smith

             

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Linux三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件Linux三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值