linux三个冒号加端口,不看绝对后悔的Linux三剑客之awk实战精讲

本文详细介绍了Linux三剑客之一的awk命令,讲解了awk的基础概念、环境、格式,以及模式和动作的使用。通过实例展示了如何处理记录和字段,包括正则表达式在awk中的应用,还涉及到了BEGIN和END模式。文章最后介绍了awk的数组和企业面试题的解决方案,加深了对awk在实际工作中的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Linux三剑客之awk命令精讲

第1章 awk基础入门

1.1 awk简介awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel)。处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。本章主要讲解awk命令的运用

1.2 awk环境简介[root@chensiqi1 ~]# cat /etc/redhat-release CentOS release 6.8 (Final)

[root@chensiqi1 ~]# uname -r2.6.32-642.el6.x86_64

[root@chensiqi1 ~]# ll `which awk`lrwxrwxrwx. 1 root root 4 Dec 23 20:25 /bin/awk -> gawk

[root@chensiqi1 ~]# awk --versionGNU Awk 3.1.7Copyright (C) 1989, 1991-2009 Free Software Foundation.

1.3 awk的格式awk指令是由模式,动作,或者模式和动作的组合组成。

模式既pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。比如NR==1,这就是模式,可以把他理解为一个条件。

动作即action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。比如awk使用格式:

5bb8c113c642aaac5242ceea8157f334.pngpattern既模式,也可以理解为条件,也叫找谁,你找谁?高矮,胖瘦,男女?都是条件,既模式。

action既动作,可以理解为干啥,找到人之后你要做什么。模式和动作的详细介绍我们放在后面部分,现在大家先对awk结构有一个了解。

1.4 模式动作

示例1-1: 基本的模式和动作[root@chensiqi1 ~]# awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd2 bin3 daemon4 adm5 lp6 sync

命令说明:

-F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。

NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。

{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。

示例1-2 只有模式[root@chensiqi1 ~]# awk -F ":" 'NR>=2&&NR<=6' /etc/passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync命令说明:

-F指定分隔符为冒号

NR>=2&&NR<=6这部分是条件,表示取第2行到第6行。

但是这里没有动作,这里大家需要了解如果只有条件(模式)没有动作,awk默认输出整行

示例1-3:只有动作[root@chensiqi1 ~]# awk -F ":" '{print NR,$1}' /etc/passwd1 root2 bin3 daemon4 adm5 lp6 sync7 shutdown8 halt9 mail10 uucp

以下省略....

命令说明:

-F指定分隔符为冒号

这里没有条件,表示对每一行都处理

{print NR,$1}表示动作,显示NR行号与$1第一列

这里要理解没有条件的时候,awk会处理每一行。

示例1-4:多个模式和动作[root@chensiqi1 ~]# awk -F ":" 'NR==1{print NR,$1}NR==2{print NR,$NF}' /etc/passwd1 root2 /sbin/nologin

命令说明:

-F指定分隔符为冒号

这里有多个条件与动作的组合

NR==1表示条件,行号(NR)等于1的条件满足的时候,执行{print NR,$1}动作,输出行号与第一列。

NR==2表示条件,行号(NR)等于2的条件满足的时候,执行{print NR,$NF}动作,输出行号与最后一列($NF)

注意:Pattern和{Action}需要用单引号引起来,防止shell作解释。

Pattern是可选的。如果不指定,awk将处理输入文件中的所有记录。如果指定一个模式,awk则只处理匹配指定的模式的记录。

{Action}为awk命令,可以是但个命令,也可以多个命令。整个Action(包括里面的所有命令)都必须放在{ 和 }之间。

Action必须被{ }包裹,没有被{ }包裹的就是Patern

file要处理的目标文件

1.5 记录和字段

接下来我给大家带来两个新概念记录和字段,这里为了方便大家理解可以把记录就当作行即记录==行,字段相当于列,字段==列。名称含义record记录,行

field域,区域,字段,列

1.5.1 记录(行)

查看一下下面这段文字root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

思考:一共有多少行呢?你如何知道的?通过什么标志?awk对每个要处理的输入数据认为都是具有格式和结构的,而不仅仅是一堆字符串。默认情况下,每一行内容都是一条记录,并以换行符分隔(\n)结束

1.5.2 企业面试题:按单词出现频率降序排序(计算文件中每个单词的重复数量)

注:(此处使用sort与uniq即可)

题目:题目创建方法:sed -r '1,10s#[^a-zA-Z]+# #g' /etc/passwd>/server/files/count.txt[root@chensiqi1 files]# cat /server/files/count.txt

root x root root bin bash

bin x bin bin sbin nologin

daemon x daemon sbin sbin nologin

adm x adm var adm sbin nologin

lp x lp var spool lpd sbin nologin

sync x sync sbin bin sync

shutdown x shutdown s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值