百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Shell脚本怎么写?Linux命令之awk下期(awk日常使用)

bigegpt 2024-09-05 12:18 6 浏览

大家好呀,今天是周三,早点下班给大家肝文章的awk 下期,顺便给大家做个预告,后面会开新的一个专题,讲一下Rust 这个编程语言的知识和入门(咱也蹭蹭热度),我用Rust 也有两年多的时间了,虽然没有用c++ 那么六六六,不过写点入门介绍还是阔以的,特别是那个梗,用rust 写 链表。。。哈哈,我也到时候会给大家实操教学一把,如何不用unsafe,写rust 链表,那的确是老复杂了,还烧脑。

好的,每次放在文章开头的聊天打屁凑字数环节结束,我们废话不多说,先开始今天的内容吧。

按照惯例,如果你是第一次刷到这个文章,不知道前因后果的话,可以点击跳转下面链接的任何一个,从头开始看一遍也可以哟,当作回顾了。

Shell脚本怎么写?(0)

Shell脚本怎么写?(1)——Shell 变量类型和定义

Shell脚本怎么写?(1-2)——Shell 变量的高级用法

Shell脚本怎么写?之 Shell脚本中的流程控制(1)

Shell脚本怎么写?之 Shell脚本中的流程控制(2)

Shell脚本怎么写?之简单Shell 脚本编写实践

Shell脚本怎么写?之简单Shell 脚本函数和模块

Shell脚本怎么写?Linux命令三剑客之sed命令

Shell脚本怎么写?Linux命令之awk上期(awk是一门语言概述)

好了,下面还是从awk 开始讲起,想必大家看了上期之后,都对awk 有了一个直观的理解,我在这再做一个总结:

awk 是一门完备的编程脚本语言,它按行为粒度去处理数据,完整的awk 脚本 分为 begin {}, {}, end {} 三个部分,begin 和 end 模块仅在开始和结束时执行一次,而中间的模块会处理一行数据执行一次。awk 每次处理一行字符串数据,字符串中默认按照空格划分列,内置变量$1 -- $n 代表这一行的某一列空格分开的字段部分

awk中有一些常见的内建变量,我们下面先做一个总结:

$n	当前记录的第n个字段,字段间由FS分隔
$0	完整的输入记录
ARGC	命令行参数的数目
ARGIND	命令行中当前文件的位置(从0开始算)
ARGV	包含命令行参数的数组
CONVFMT	数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO	最后一个系统错误的描述
FIELDWIDTHS	字段宽度列表(用空格键分隔)
FILENAME	当前文件名
FNR	各文件分别计数的行号
FS	字段分隔符(默认是任何空格)
IGNORECASE	如果为真,则进行忽略大小写的匹配
NF	一条记录的字段的数目
NR	已经读出的记录数,就是行号,从1开始
OFMT	数字的输出格式(默认值是%.6g)
OFS	输出字段分隔符,默认值与输入字段分隔符一致。
ORS	输出记录分隔符(默认值是一个换行符)
RLENGTH	由match函数所匹配的字符串的长度
RS	记录分隔符(默认是一个换行符)
RSTART	由match函数所匹配的字符串的第一个位置
SUBSEP	数组下标分隔符(默认值是/034)

上面的玩意儿是不是看的有点懵逼,咋这么多呢,大家不用触霉头,记住几个常用的就行了,一般日常使用最多的就是 NR, FS,$n 这几个。

然后我们先执行下面awk 命令示例:

 awk 
 'BEGIN{
printf "%4s %4s %4s 
%4s %4s %4s %4s %4s
 %4s\n",
"FILENAME",
  "ARGC",
  "FNR",
  "FS",
  "NF",
  "NR",
  "OFS",
  "ORS",
  "RS";
printf "---------------------------------------------\n"} 
{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",
  FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  test.txt

看过上期的朋友都知道,这个就是把上面讲的所有的内置变量打印出来,给大家展示一下,由于只打印一次,我们直接写在begin {} 模块中即可。

上面awk 命令执行结果如下:

大家注意,那些看起来没打印出来的其实是空格。。。

然后下面给大家介绍下awk 的使用场景。

  1. 场景1,提取linux 服务名

大家如果用过linux 系统,肯定知道linux 系统的/etc/passwd文件,保存着这个linux 服务器所有可登录的服务用户名。

具体如下图所示:

然后我们的需求是,快速的获取到每个服务名而剔除掉其它多余的字符串。比如第一行就只留下root, 第二行就留下daemon 等等。

这个例子就很适合使用awk 命令处理,你用sed 的话还需要做字符匹配,sed处理也不是按照行为粒度的等,手动删除就更蠢了。

那如何一句简单的awk 指令就解决呢?

很简单,只需要下面的awk 指令即可:

awk 'BEGIN{
FS=":"
}
{
  print $1
}' 
/etc/passwd

我们来看看执行结果:

由于分隔符变量使用的还是比较多的,所以awk 提供了入参配置符来进行快捷设置。

上面的命令等价于下面的命令:

awk -F ":" '{print $1}'
/etc/passwd
// 直接使用-F 设置分隔符为“:”
  1. 场景2:提取某个文件夹所有文件的权限和文件名信息

需求描述:

我们执行在linux 命令中执行ls -al 时,会出现如下结果:

其中有些冗余字段我不需要,我只想留下文件的权限和文件名这两列,并把这两列的内容格式化输出出来。

怎么使用awk 命令完成呢?

聪明的各位读者肯定想到了,

我可以直接如下:

 ls -al |
 awk  '{
print "rights:\t" $1 
"\tfilename:\t" $9
}'

// 直接把结果取第一列和第九列不就完了

那我们试试可以吗?

执行下,如下结果:

我们发现,不对啊,有一行数据是错的,这是因为ls -al 执行显示结果的第一行是:

它的格式跟下面我们想要的格式都不一样,如果马虎大意,这不就出bug 了。

那怎么办呢?

我们正确的awk 命令需要使用跳过第一行不处理的判断。

如下是上面需求的正解:

 ls -al |
 awk  '{
if (NR > 1) {
  print "rights:\t" $1
  "\tfilename:\t" $9
}
}'
// awk是一门语言,别忘了这个话
// 它也有流程控制,if while循环啥都有
// 这才是上面这个需求的正解

好的,今天我们通过实例给大家讲解了awk 的使用场景,其实awk 使用场景真的很多,不局限于字符处理,还有awk 可以做浮点运算,计算器,格式化显示等方方面面,而且它的可定制性很强,语言性比sed grep等命令强大很多。awk还有N多的内置函数,逻辑运算符,流程控制,脚本执行,模块化等,完全不弱于shell 脚本语言。就不再赘述了,大家感兴趣,可以自行学习,一般的确也用不到那么多。

最后的最后,因为有同学留言说想听RUST, 所以今天这篇文章结束后,shell 脚本的介绍就要告一段落了,下一期预告将是Rust 语言入门教程0, 我将会在未来的几个月把rust 语言的语法,所有权,生命周期,rust涉及的方方面面给大家做一个详细的讲解介绍。

如果你觉得文章不错的话,别忘了关注我哟。。。谢谢各位同学。

相关推荐

或者这些Joplin插件也可以帮助你的笔记应用再一次强大

写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...

Three.JS教程4 threejs中的辅助类

一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...

第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)

glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...

SpriteJS:图形库造轮子的那些事儿

从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...

平时积累的FPGA知识点(6)(fpga经典应用100例)

平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...

芯片逻辑调度框架设计 都需要那些那些软件工具

设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...

ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)

本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...

好课推荐:从零开始大战FPGA(从零开始的冒险4399)

从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...

业界第一个真正意义上开源100 Gbps NIC Corundum介绍

来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...

高层次综合:解锁FPGA广阔应用的最后一块拼图

我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...

Xilinx文档编号及其内容索引(部分)

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...

Xilinx Vivado联合Modelsim软件仿真

引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...

体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!

你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...

Dialogue between CPC and political parties of neighboring countries held in Beijing

BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...