【树莓派不吃灰】命令篇⑦ 学习awk命令

news2025/1/18 3:17:26

在这里插入图片描述

目录

  • awk 命令
    • 1. 基本语法
    • 2. 工作原理
    • 3. 基础实例操作
      • 3.1 把用户名和Shell打印出来
      • 3.2 找到以ssh关键字开头的所有行,并输出用户名和shell,中间以“-”分割
      • 3.3 给用户 ID加上一个常量
      • 3.4 输出第一个字段为sshd所在的行
    • 4. BEGIN END 操作
      • 4.1 基于3.2,在行前面添加user,shell,最后一行添加 dpjcn-/sbin/root
    • 5. 常用awk 内置变量
      • 5.1 统计passwd每行的行号,每行的列数
      • 5.2 打印第三行的所有数据
      • 5.3 打印第三行的第7列数据

  • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
  • ❤️ 本篇创建记录 2022-11-19 ❤️
  • ❤️ 本篇更新记录 2022-11-19 ❤️
  • 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
  • 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
  • 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥

awk 命令

参考资料:

  • https://www.runoob.com/linux/linux-comm-awk.html

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。比较倾向于将一行分为数个“字段”来处理。
因为按照某种格式进行分割,所以对格式化的文本处理能力超强。

1. 基本语法

awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename

常用选项参数:

  • -F:指定输入文件分隔符。
  • -v:赋值一个用户定义变量。
  • -f:引入awk执行脚本。

pattern

  • 表示AWK在数据中查找的内容,就是匹配模式。

action

  • 在找到匹配内容时所执行的一系列Linux命令。

注意:

行匹配语句 awk 只能用单引号。单引号内部可以使用双引号。

2. 工作原理

    1. 读入每一行记录
    1. 将记录按指定的域分隔符划分域,填充域(不够就补充)。

$0则表示所有域,$1表示第一个域,$n表示第n个域,$NF表示文本行中的最后一个数据字段。

3. 基础实例操作

我们以 /etc/passwd 文件为例子。

pi@raspberrypi:~ $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
_apt:x:102:65534::/nonexistent:/usr/sbin/nologin
pi:x:1000:1000:,,,:/home/pi:/bin/bash
systemd-timesync:x:103:109:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
_rpc:x:105:65534::/run/rpcbind:/usr/sbin/nologin
statd:x:106:65534::/var/lib/nfs:/usr/sbin/nologin
sshd:x:107:65534::/run/sshd:/usr/sbin/nologin
avahi:x:108:113:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
lightdm:x:110:114:Light Display Manager:/var/lib/lightdm:/bin/false
rtkit:x:111:116:RealtimeKit,,,:/proc:/usr/sbin/nologin
pulse:x:112:119:PulseAudio daemon,,,:/run/pulse:/usr/sbin/nologin
saned:x:113:122::/var/lib/saned:/usr/sbin/nologin
colord:x:114:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
hplip:x:115:7:HPLIP system user,,,:/run/hplip:/bin/false
epmd:x:116:124::/run/epmd:/usr/sbin/nologin
geoclue:x:117:125::/var/lib/geoclue:/usr/sbin/nologin
systemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologin
motion:x:118:126::/var/lib/motion:/usr/sbin/nologin

可以看到都是格式化文本。

aaa:bbb:ccc:ddd

/etc/passwd 文件将每个用户的基本信息记录为文件中的一行,一行中包含 7 个字段。每个字段之间用冒号“:” 分隔(以sshd:x:107:65534::/run/sshd:/usr/sbin/nologin为例子)。

  • (1)用户名 (sshd): 已创建用户的用户名,字符长度 1 个到 12 个字符。如果是“*”的话,那么就表示该账号被查封了,系统不允许持有该账号的用户登录。
  • (2)密码(x):代表加密密码,保存在 /etc/shadow 文件中。
  • (3)用户 ID(107):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
  • (4)群组 ID (65534):代表user1用户所属群组的 ID 号,每个群组都要有一个唯一的 GID ,群组信息保存在 /etc/group文件中。
  • (5)用户信息():代表描述字段,可以用来描述用户的信息。
  • (6)主目录(/run/sshd):代表用户的主目录。
  • (7)Shell(/usr/sbin/nologin):代表用户使用的 shell 类型。

3.1 把用户名和Shell打印出来

执行命令:

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

命令分析:

-F: 指定分隔符为:
print $1,$7 表示打印第一列和第七列。

执行结果:

pi@raspberrypi:~ $ awk -F: '{print $1,$7}' /etc/passwd
root /bin/bash
daemon /usr/sbin/nologin
bin /usr/sbin/nologin
sys /usr/sbin/nologin
sync /bin/sync
games /usr/sbin/nologin
man /usr/sbin/nologin
lp /usr/sbin/nologin
mail /usr/sbin/nologin
news /usr/sbin/nologin
uucp /usr/sbin/nologin
proxy /usr/sbin/nologin
www-data /usr/sbin/nologin
backup /usr/sbin/nologin
list /usr/sbin/nologin
irc /usr/sbin/nologin
gnats /usr/sbin/nologin
nobody /usr/sbin/nologin
systemd-network /usr/sbin/nologin
systemd-resolve /usr/sbin/nologin
_apt /usr/sbin/nologin
pi /bin/bash
systemd-timesync /usr/sbin/nologin
messagebus /usr/sbin/nologin
_rpc /usr/sbin/nologin
statd /usr/sbin/nologin
sshd /usr/sbin/nologin
avahi /usr/sbin/nologin
dnsmasq /usr/sbin/nologin
lightdm /bin/false
rtkit /usr/sbin/nologin
pulse /usr/sbin/nologin
saned /usr/sbin/nologin
colord /usr/sbin/nologin
hplip /bin/false
epmd /usr/sbin/nologin
geoclue /usr/sbin/nologin
systemd-coredump /usr/sbin/nologin
motion /usr/sbin/nologin
pi@raspberrypi:~ $ 

3.2 找到以ssh关键字开头的所有行,并输出用户名和shell,中间以“-”分割

执行命令:

awk -F: ‘/^ssh/{print $1"-"$7}’ /etc/passwd

命令分析:

-F: 指定分隔符为:
print $1"-"$7 表示打印第一列和第七列。中间分割符“-”
/^ssh/ 表示一个正则表达式,以ssh开头

执行结果:

pi@raspberrypi:~ $ awk -F: '/^ssh/{print $1"-"$7}' /etc/passwd
sshd-/usr/sbin/nologin

3.3 给用户 ID加上一个常量

执行命令:

awk -F: -v i=1 ‘{print $1"-"$3+i}’ /etc/passwd

命令分析:

-F: 指定分隔符为:
-v i=1 表示定义用户变量i,其值等于1。
print $1"-"$3+i 表示打印第一列和第三列。中间分割符“-”,并且第三列加上用户变量i的值。

执行结果:

pi@raspberrypi:~ $ awk -F: -v i=1 '{print $1"-"$3+i}' /etc/passwd
root-1
daemon-2
bin-3
sys-4
sync-5
games-6
man-7
lp-8
mail-9
news-10
uucp-11
proxy-14
www-data-34
backup-35
list-39
irc-40
gnats-42
nobody-65535
systemd-network-101
systemd-resolve-102
_apt-103
pi-1001
systemd-timesync-104
messagebus-105
_rpc-106
statd-107
sshd-108
avahi-109
dnsmasq-110
lightdm-111
rtkit-112
pulse-113
saned-114
colord-115
hplip-116
epmd-117
geoclue-118
systemd-coredump-997
motion-119
pi@raspberrypi:~ $ 

3.4 输出第一个字段为sshd所在的行

执行命令:

awk -F: ‘$1==“sshd”{print $0}’ /etc/passwd

执行结果:

pi@raspberrypi:~ $ awk -F: '$1=="sshd"{print $0}' /etc/passwd 
sshd:x:107:65534::/run/sshd:/usr/sbin/nologin
pi@raspberrypi:~ $ 

4. BEGIN END 操作

在执行awk命令的前后,我们可以通过 BEGIN END 两个表达式新增一些前后显示。

语法:

awk [选项参数] BEGIN{action1} PROGRAM{action2} END{action3} filename

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;

PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;

END是处理完数据流后的操作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

  • 1)BEGIN: 在开始处理数据流之前执行,可选项
  • 2)program: 如何处理数据流,必选项
  • 3)END: 处理完数据流后执行,可选项

4.1 基于3.2,在行前面添加user,shell,最后一行添加 dpjcn-/sbin/root

执行命令:

awk -F: ‘BEGIN{print “user,shell”} /^ssh/{print $1"-"$7} END{print “dpjcn-/sbin/root”}’ /etc/passwd

执行结果:

pi@raspberrypi:~ $ awk -F: 'BEGIN{print "user,shell"} /^ssh/{print $1"-"$7} END{print "dpjcn-/sbin/root"}' /etc/passwd
user,shell
sshd-/usr/sbin/nologin
dpjcn-/sbin/root
pi@raspberrypi:~ $ 

5. 常用awk 内置变量

变量说明
FILENAMEawk浏览的文件名
NR已读的记录数
NF浏览记录的域的个数

5.1 统计passwd每行的行号,每行的列数

执行命令:

awk -F: ‘{print “line:” NR “-” “col:” NF}’ /etc/passwd

执行结果:

pi@raspberrypi:~ $ awk -F: '{print "line:" NR "-" "col:" NF}' /etc/passwd
line:1-col:7
line:2-col:7
line:3-col:7
line:4-col:7
line:5-col:7
line:6-col:7
line:7-col:7
line:8-col:7
line:9-col:7
line:10-col:7
line:11-col:7
line:12-col:7
line:13-col:7
line:14-col:7
line:15-col:7
line:16-col:7
line:17-col:7
line:18-col:7
line:19-col:7
line:20-col:7
line:21-col:7
line:22-col:7
line:23-col:7
line:24-col:7
line:25-col:7
line:26-col:7
line:27-col:7
line:28-col:7
line:29-col:7
line:30-col:7
line:31-col:7
line:32-col:7
line:33-col:7
line:34-col:7
line:35-col:7
line:36-col:7
line:37-col:7
line:38-col:7
line:39-col:7
pi@raspberrypi:~ $ 

5.2 打印第三行的所有数据

执行命令:

awk ‘NR==3{print $0}’ /etc/passwd

执行结果:

pi@raspberrypi:~ $ awk 'NR==3{print $0}' /etc/passwd 
bin:x:2:2:bin:/bin:/usr/sbin/nologin
pi@raspberrypi:~ $ 

5.3 打印第三行的第7列数据

执行命令:

awk -F: ‘NR==3{print $7}’ /etc/passwd

执行结果:

pi@raspberrypi:~ $ awk -F: 'NR==3{print $7}' /etc/passwd 
/usr/sbin/nologin
pi@raspberrypi:~ $ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧仓储解决方案-最新全套文件

智慧仓储解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧仓储全套最新解决方案合集一、建设背景 仓储行业目前存在的问题 仓管员需要手动录单,工作量大,易出错,无法保证数据的准确率和及时性。 批次属性复杂、保…

计算机里的刻度:时钟和步进器

计算机的底层逻辑很简单,它们被定义为完成一些简单的事情。计算机是一个复杂系统,复杂的是如何规划好处理这些简单的事情的时间和步骤。本节就可以了解到计算机的时间刻度和步进器的构成,帮助我们进一步理解计算机的底层工作原理。 时钟是什…

redis三(3-1)

分布式缓存 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题 一、redis持久化 - RDB持久化 - AOF持久化1.1RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的…

java项目-第150期ssm网络视频播放器-java毕业设计_计算机毕业设计

java项目-第150期ssm网络视频播放器-java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm网络视频播放器》 该项目分为2个角色,管理员、用户。 用户可以浏览前台查看视频信息、系统公告、论坛信息。 并且可以进入到个人中心查看视频信息、…

计算机毕业设计java基于javaweb+ssm+vue婚纱摄影网站

本站不同于其它摄影网站,本网站不但可以展示本店的摄影作品,更可以列出众多摄影套餐供用户选择预约,用户看中哪款套餐了,可以预约时间进行拍摄,即增加了店内本身的业务量,也方便了客户直接在线订套餐。 对于…

[附源码]计算机毕业设计JAVA基于JAVAWEB的高校实训管理系统

[附源码]计算机毕业设计JAVA基于JAVAWEB的高校实训管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术:…

nacos源码分析-服务注册(客户端)

前言 一直都想写SpringCloudAlibaba的源码分析,终于开始动手第一篇了,如果想要看懂Nacos源码至少要把《SpringBoot自动》配置看了,不然就是看天书。本篇文章呢带大家一起来看一下Nacos-Client 客户端服务注册这一部分的源码。 基础环境 首…

MongoDB基本查询语句

文章目录 查询选择器查询就是获取存储在数据库中的数据。在MongoDB中,查询通常针对一个集合来操作。查询可以指定查询条件,只返回匹配的文档;还可以指定投影项,只返回指定的字段,减少返回数据到客户端的网络流量。 为了进行测试,我们先假想一个常用的电子商务网站上可能用…

svg VS canvas,哪种在移动端适配度更好?实战经历告诉你~

最近做了一个画图的功能,后端提供棋盘数据,前端需要把数据转换成一个棋盘画出来,当时有两种实现方法,一种是使用canvas画图,一个是使用svg画图. ui提供的设计稿如下: 由于这是一个轮播图,当后端返回多少张棋盘数据时,就需要渲染多少张棋盘,最多有十张,基于canvas和svg画图,为了…

【Milvus的以图搜图】

0. 介绍 Milvus官方在bootcamp项目中给开发者提供多种解决方案,包含常见的以图搜图、人脸检索、DNA相似性检索、视频检索等等,具体可以参考bootcamp项目。 本文主要就bootcamp中以图搜图reverse_image_search的代码介绍如何运行该样例,进而了…

文献阅读-VSE++:使用困难负样本来改经视觉语义嵌入

Title:《VSE: Improving Visual-Semantic Embeddings with Hard Negatives》 Authors:Fartash FaghriDavid FleetJ. KirosS. FidlerJournal:ArXiv (2017)Date:2017 code:GitHub - fartashf/vsepp: PyTorch Code for t…

Java基础38 面向对象三大特征之多态

OOP之多态 多态1.多态的具体体现2.向上转型3.向下转型4.属性重写5.instanceOf6.动态绑定机制(核心)● Java的动态访问机制7.多态数组8.多态参数)多态 ● 多【多种】态【状态】 方法或对象具有多种形态。 是建立在封装和继承之上的面向对象的第三大特征…

一文带你学会Vue3基本语法

Vue3 起步1.通过 CDN 使用 Vue32.Vue3 模板语法文本Html属性表达式指令参数3.模板用户输入双向绑定1.通过 CDN 使用 Vue3 你可以借助 script 标签直接通过 CDN 来使用 Vue&#xff1a; <script src"https://unpkg.com/vuenext"></script>通过 CDN 使用…

在WPF中使用Prism弹出自定义窗体样式的对话框

概述 我们在Prism中弹出一个对话框&#xff0c;默认是一个Windows默认样式的窗口&#xff0c;这样会同自己所开发的项目完全不搭调&#xff0c;譬如下面这样子 那么如果为了配合软件主体的风格&#xff0c;可以做出类似这样效果 其实原理也很简单&#xff0c;Prism也考虑到了这…

不科学,RocketMQ生产者在一个应用服务竟然不能向多个NameServer发送消息

前言 目前有两套RocketMQ集群&#xff0c;集群A包含topic名称为cluster_A_topic&#xff0c;集群B包含topic名称为cluster_B_topic&#xff0c;在应用服务OrderApp上通过RocketMQ Client创建两个DefaultMQProducer实例发送消息给集群A和集群B&#xff0c;架构图如下&#xff1…

使用Vue脚手架配置代理服务器的两种方式

1 前言 本文主要介绍使用Vue脚手架配置代理服务器的两种方式 注意&#xff1a;Vue脚手架给我们提供了两种配置代理服务器的方式&#xff0c;各有千秋&#xff0c;使用的时候只能二选一&#xff0c;不能同时使用 2 代理 除了cros和jsonp&#xff0c;还有一种代理方式&#x…

传奇GM调整极品属性的命令------技术分享

传奇GM调整极品属性的命令 GM命令supermake命令用法&#xff01; 以下格式皆为supermake a b c   以上命令含义&#xff1a;调整A(装备)的B(属性)到C(点数) supermake 1 0 10  1代表武器  0代表攻击 10代表调整的点数 B参数代表需要调整的那项属性如攻击 魔法 道术 …

黑*头条_第4章_文章搜索前后端成形记 实名认证审核

黑*头条_第4章_文章搜索前后端成形记 & 实名认证审核 文章目录黑*头条_第4章_文章搜索前后端成形记 & 实名认证审核文章搜索前后端成形记 & admin实名认证审核1 文章详情-前端开发1.1登录接口1.1.1 基本定义1.1.2 code定义1.1.3 mapper实现1.1.4 service代码实现1.…

宝塔一键安装wordpress

使用宝塔面板来部署网站是非常方便的&#xff0c;以WordPress网站为例来说&#xff1a; 一般有两种方式安装WordPress网站&#xff0c;第一种是上传网站程序到网站根目录手动安装&#xff0c;另外一种是在宝塔面板后台左侧菜单&#xff0c;找到“WordPress一键部署”&#xff…

Map 和 Set

模型 一般我们把搜索的数据称为 关键字(key) , 关键字对应的值叫做 值(value) , 将之称为 key-value 键值对. 衍生出两种模型: 1. 纯 key 模型 例如 : 班级上点名, 在花名册上找人的名字. 2. key-value 模型 例如 : 统计一个字符串中每个字母出现的次数, 结果是每个字母和它对…