linux_shell笔记(十)

告别“静态组件”:Adobe XD的堆栈+状态,打造“活”的响应式UI 今天,我想分享一套能彻底告别这种“笨方法”的、Adobe XD中的进阶技巧,通过组合使用“堆栈”、“内边距”和“组件状态”,去构建一个能自动适应内容、真正“活”起来的智能响应式组件。 阅读详情

 

 

gawk 模式处理语言

gawk 工具是一种模式扫描和处理语言,它搜索一个或者多个文件,以查看这些文件中是否存在匹配指定模式的记录。每次发现匹配时,它通过执行动作的方式来处理文本行。

gawk 属于数据驱动语言:描述想要处理的数据并告诉gawk 当它发现这些数据时将要做的事情。

 

语法:

gawk [options] [program] [file-list]

gawk [options] -f program-file [file-list]

 

program: 用户在命令行中所包含的gawk 程序,为了阻止shell 将gawk 命令解释为shell 命令,需要使用单引号将其引起来。

program-file: 存放gawk 程序的文件的名称,将较长或较复杂的程序放置在文件中以减少错误和重复输入。

file-list:gawk 要处理的普通文件的路径名,这些文件就是输入文件;如果没有指定,gawk 将从标准输入获取输入或getline 或协进程指定输入。

 

语言基础

gawk 程序( 来自命令行或者程序文件) 由一行或者多行文本构成,其中包含一个模式和动作,格式如下:

pattern {action}

pattern: 模式,用来从输入中选取文本行;如果程序行中不包含模式,gawk 将选取输入中的所有行。

action: 对于由模式选中的每行文本,gawk 工具都执行动作action ;如果程序行中没有包含动作,gawk 将把选中的行复制到标准输出。

如果多个模式选中同一行文本,gawk 将按照这些模式出现在程序中的顺序分别执行与每个模式关联的动作。

 

模式

用斜杠把正则表达式包装起来,就可以将其作为模式使用。~ 操作符用于测试某个字段或者变量是否匹配正则表达式。!~ 用于测试不匹配。可以使用布尔操作符||(OR) 或者&&(AND) 来组合任何模式。

BEGIN 和END 两个独特的模式,分别是在gawk 开始处理之前和处理之后要执行的命令。

, 逗号是范围查找符。如果在一个gawk 程序行上用逗号将两个模式隔开,gawk 选取从匹配第1 个模式的第1 行开始的文本行。gawk 选取的最后一行是匹配第2 个模式的那行紧接着的下一行文本。查找第2 个模式后,将再次查找第1 个模式以再次开始这个过程。

 

动作

如果gawk 匹配某个模式,它将执行gawk 命令的动作部分所指定的动作。如果没有指定动作,gawk 将执行默认动作,即print 命令( 可用{print} 显示表示) 。除非用逗号将print 命令中的各项区分开,否则gawk 将它们连接起来。逗号使得gawk 用输出字段分隔符(OFS ,通常是空格符) 将各项分隔开来。

通过用分号将多个动作隔开,可以在同一行上包含多个动作。

 

 

注释

gawk 工具不处理以# 号开头的程序行中的任何内容。

 

变量

尽管不需要在使用gawk 变量之前声明变量,但用户可以选择向这些变量赋初值。没有赋值的数值变量初始化为0 ,而字符串变量则被初始化为空串。除了用户变量之外,gawk 还维护了程序变量。在模式部分和动作部分均可使用用户变量和程序变量。

程序变量:

变 量

含 义

$0

当前记录( 作为单个变量)

$1-$n

当前记录中的字段

FILENAME

当前输入文件名(null 表示标准输入)

FS

输入字段分隔符

NF

当前记录的字段数目

NR

当前记录的记录编号

OFS

输出字段分隔符

ORS

输出记录分隔符

RS

输入记录分隔符

 

除了可以在程序中初始化变量以外,还可以在命令行上使用-v 选项初始化变量。如果某个变量值在gawk 的两次运行之间发生改变,这个特性就非常有用。

默认情况下,输入记录和输出记录的分隔符均为换行符;输入字段分隔符是空格和TAB ,输出字段分隔符是空格。任何时刻均可以修改分隔符的值。

 

选项

-v

-F

 

 

函数

length(str),int(num),index(str1,str2),split(str,arr,del),sprintf(fmt,args),substr(str,pos,len),sub(str,pos,len),tolower(str),toupper(str).

 

算数操作符

来自C 编程语言。

 

关联数组

数组使用字符串作为索引。在使用关联数组时,用户可以用数值字符串作为索引来模仿传统数组。

对关联数组元素赋值

array[string] = value

array: 数组名称

string: 数组元素在数组中的索引

value: 要指派的值

 

printf

类似于C 语言中的printf :

printf “control-string”,arg1,arg2,......,argn

control-string: 决定如何格式化参数arg1,arg2,....argn

转换规格:

%[-][x][.y]conv

'-' 使得参数左对齐,'x' 最小字段宽度,'.y' 数字中小数点右边的位数,'conv' 数值转换类型。

 

控制结构

控制语句将改变gawk 程序中命令的执行顺序。

if...else

if(condition)

{commands}

[else

{commands}]

--------------------------

while

while(condition)

{commands}

--------------------------

for

for(init;condition;increment)

{commands}

 

for(var in array)

{commands}

循环遍历一个名为 array 的关联数组中的所有元素,每次循环,都将 array 的 相应元素的索引值 赋给 var

-------------------------

break

continue

 

示例:

下面这个示例读取passwd 文件,列出没有口令的用户以及具有重复用户ID 编号的用户,注意使用””输出的字符串信息中排版所使用的空白符,因为默认情况下使用print 输出时除非利用',' 分隔字段( 输出时使用OFS 替代',' 从而将各项分隔开来) ,否则将各个输出项连接起来。

1 gawk < /etc/passwd '

2 BEGIN {

3 uid[void] =""

4 }

5 {

6 dup = 0

7 split($0,field,":")

8 if(field[2] == "")

9 {

10 if(field[5] == "")

11 {

12 print field[1] " has no password."

13 }

14 else

15 {

16 print field[1] " ("field[5]") has no password."

17 }

18 }

19 for(name in uid)

20 {

21 if(uid[name] == field[3] )

22 {

23 print field[1] " has the same UID as " name " /

24 :UID = " uid[num]

25 dup =1

26 }

27 }

28 if(!dup)

29 {

30 uid[field[1]] = field[3]

31 }

32 }'

33

黑体标示部分表征了关联数组的用法,uid 数组使用field[1] 作为数组的下标索引( 在本例中为用户名) ,数组中该索引对应的数组元素的值为field[3]( 在本例中为用户的uid) 。for 循环在每次循环中,将数组uid 的索引值 赋给变量name ,if 判断利用该索引值对应的数组元素来判断是否存在uid 重复。

函数split 利用':' 将当前记录($0 当前记录作为当个变量) 分隔到数组field 中。上面提到的用户名,用户uid 等都是通过引用数组field 的元素得到的。除了利用split 函数以外,也可以利用给FS( 输入字段分隔符) 赋值为”:” 来达到对输入记录分隔开来的目的;只不过split 分隔后利用数组元素来引用相应项( 用户名,uid 等等) ,而利用FS 赋值后可以使用对字段的访问($1 引用用户名, 等) 来引用相应项。下面的两个例子分别使用了上述的两种方式来对输入记录进行处理,其得到的结果相同。

1 gawk < /etc/passwd '

2 BEGIN {

3 }

4 {

5 split($0,field,":")

6 print field[1],field[2],field[3],field[4]

7 }'

8

--------------------

1 gawk < /etc/passwd '

2 BEGIN {

3 FS = ":"

4 }

5 {

6 print $1,$2,$3,$4

7 }'

8

 

> gawk '{print}' cars

> gawk '/chevy/' cars

> gawk '{print $2,$1}' cars

> gawk '{print $3,$1}' cars

> gawk '/chevy/ {print $3, $1}' cars

> gawk '{ print }' cars

> gawk '{print}' cars

> gawk '/chevy/' cars

> gawk '/chevy/' cars > test.out

> gawk '{print $3,$1}' cars

> gawk '{print $3 $1}' cars

> gawk '{print $3,$1}' cars

> gawk '/chevy/ {print $3,$1}' cars

> gawk '/h/' cars

> gawk '$1 ~ /h/' cars

> gawk '$1 ~ /^h/' cars

> gawk '$2 ~ /^[tm]/ {print $3,$2,"$" $5}' cars

> gawk '$3 ~ /5$/ {print $3,$1,"$" $5}' cars

> gawk '$3 == 1985' cars

> gawk '$5 < 3000' cars

> gawk '$5 <= 3000' cars

> gawk '$1 > 480 {print $2,$3,$4}'

> gawk '$1 > 480 {print $2,$3,$4}' history.out

> gawk '"2000" <= $5 && $5 < "9000"' cars

> gawk '"2000" <= $5 && $5 < "9000"' cars

> gawk '2000 <= $5 && $5 < 9000' cars

> gawk '/volvo/ , /bmw/' cars

> gawk '/volvo/,/bmw/' cars

> gawk '/chevy/,/ford/' cars

> gawk '{print length,$0}' cars | sort -n

> gawk 'length >24 {print NR}' cars

> gawk 'NR == 2 , NR == 4' cars

> gawk 'END {print NR,"cars for sale."}' cars

> gawk 'END {print NR,"cars for sale."} /{print}' cars

> gawk '/mark/ {print}' /etc/passwd

> gawk '/terry/ {print}' /etc/passwd

 

> history | gawk '{$1 = ">"; print}' | sed -n '/gawk/ p'

 

 

 

整理并记录几种运算放大器 运算放大器是一种十分常见的电子元器件,最近我在学习运放,以前在学校没有好好的学习,今天在B站看了唐老师讲运算放大器-唐老师讲电赛系列视频教程,记录下所学的,纯当是自己的笔记 学习运放,有两个重要的概念及重要的计算法宝,虚短vp=vn;和虚断ip=in 1反向比例运算电路 Rf可以大于、小于或等于R,起到放大、跟随、衰减输入的作用; 平衡电阻没有太高的精度要求,可加可不加; 有些运放内部集成了补偿电路,就不需要使用平衡电阻,加了反而增大误差,如OPA227 2.同向比例运放电路 . 阅读详情

相关推荐

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

shell脚本一看就会,学习无压力

一,条件语句 1.1条件测试test test测试文件的表达式是否成立,当条件成立时候,返回值为0,其余时间为非0值。 格式1:test 条件表达式 格式2:[ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用) 1.2文件测试 文件测试基本格式为: [ 操作符 文件或目录 ] (注意两端要有空格) &? 返回0表示条件成立,返回非零值表示条件不成立 && 逻辑与,"而且"的意思 || 逻辑或,"或者"的意思 常见的测试操作符

m0_60353617的博客 416

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

【Linux】ALL常用命令

一、 命令基本格式 二、 文件处理命令 三、 文件搜索命令 四、 帮助命令 五、 压缩与解压缩命令 六、 关机和重启命令 七、 其他常用

小牛肉_ 4646

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 974

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6405

linux shell 高级,Linux Shell高级技巧

一、在循环中使用管道的技巧:在Bash Shell中,管道的最后一个命令都是在子Shell中执行的。这意味着在子Shell中赋值的变量对父Shell是无效的。所以当我们将管道输出传送到一个循环结构,填入随后将要使用的变量,那么就会产生很多问题。一旦循环完成,其所依赖的变量就不存在了。/>cat>test8_1.sh#!/bin/sh#1.先将ls-l命令的结果通过管道传给gr...

weixin_28782221的博客 354

从零到一:R与RStudio的安装与配置全攻略

本文提供了R与RStudio的完整安装与配置指南,涵盖Windows、Mac和Linux三大操作系统。从基础环境搭建到高级性能优化,详细介绍了R语言安装、RStudio配置、项目管理和实用技巧,帮助数据科学初学者快速搭建高效的分析工作环境。

weixin_29062671的博客 421

常用awk命令(转)

awk用法:awk'pattern{action}' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符 1...

weixin_30740295的博客 296

别再乱删文件了!修复Print Spooler服务自动停止的3个关键检查点(附Win10/Win11实测)

本文深入解析Windows系统中Print Spooler服务自动停止的常见原因及修复方法。从第三方驱动冲突、权限与服务依赖关系到打印队列积压,提供3个关键检查点的详细排查步骤,帮助用户彻底解决打印服务异常问题,适用于Win10/Win11系统。

weixin_31569671的博客 682

软考「系统规划与管理师(第2版)」通关全攻略(2026年下半年)

它考的是一个IT管理者能不能用体系化的语言,把"我们为什么要建这个系统→怎么规划→怎么管好服务→怎么合规"讲圆。所以备考的核心策略也很明确——教材建框架 → 真题磨考点 → 案例练结构 → 论文备好真实项目素材 → 机考练打字。按计划走,不贪全、不盲刷、不死背,稳稳把三科都推过45分那条线。祝你通关 🎯。

软件行业技术文化交流。 3053

Linux Shell学习笔记十

Linux Shell学习笔记十

God's blog 1159

里海NX二次开发3000例-专栏目录

UDO(User Defined Object)是“用户自定义对象”。应用非常广,可以用UDO创建自定义特征,也可以对NX原有的特征添加一些特殊信息,这些信息会保存在部件中,以后可以查询。还可以实时追踪NX对象,例如做3D包容盒线框自动追踪实体,做2D矩形框自动追踪图纸尺寸值,这些在下面的例子都有介绍。读者可以自己编译下面的例子,体会理解UDO的用法。------里海 20230512序号内容​链接01使用UDO在所有实体上设置更新回调​链接02使用UDO生成跟踪实体的线框​链接03删除UDO​链接。

王牌飞行员_里海的博客 7721

【Shell】【学习笔记】Linux Shell脚本应用(十)

课时10 awk文本处理工具 一、关于文本处理 Shell输出为文本:面向过程,而非面向对象。 非交互式处理方式:         重定向、管道、命令替换         head、more、cut、tr         grep、awk、sed awk编程语言/数据处理引擎         创造者:Aho、Weinberger、Kernighan         基于模

木名的专栏 399

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux学习笔记(十)Shell Scripts

1.用./ 或者sh执行shell时

hehe__eheh的专栏 391

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

我的《鸟哥的Linux私房菜》笔记(十)shell script

一、script 的执行         (1)script 的执行方法         假设我们有一个脚本文件 shell.sh 在 /home/dmtsai/shell.sh  ,那么要执行它可以:         ①直接命令下达         绝对路径: 使用 /home/dmtsai/shell.sh 来下达指令         相对路径:假设工作目录在 /ho

1689

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一个简单的linux shell程序示例及其说明

  写一个一般的多项选择的小程序,该程序从一个数据文件中读入问题,显示这些问题给用户,程序还能识别正确选项的编号和错误选项的编号。用户可以随时提交答案并计算得分,然后退出程序。----每个主题都在测验的主目录中对应着一个子目录。主目录的名字存放在环境变量QUIZDIR中,该变量的默认值为~/games/quiz

蚊室 2910

linux_shell笔记(九)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } TD P { margin-bottom: 0cm } -->Here文档:允许用户把脚本的内容重定向为脚本的输入。例子: 1 grep-i "$1"

蚊室 2474

linux_shell笔记(八)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->Bash 程序设计控制结构:控制结构有if...then、for...in、while、until、case

蚊室 2153

linux_shell笔记(三)

 命令行:当在命令提示符后输入命令并按ENTER键后,shell将执行相应的程序。包括命令和参数的行称为命令行。 Command [arg1][arg2] [arg3]....[argn] RETURN命令行上采用一个或多个空格来隔开每个元素。arg为参数,方括号表明被括起来的参数为可选项。选项是一种特殊类型的参数,其前面通常是一

蚊室 1987

linux_shell笔记(四)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->Linux系统中最流行的vi克隆有elvisnvi vile vimvim编辑器不是一个格式化文本的程序,它不能调整版面,也不具有复杂文字处理系统(openoffice.org)所具有的格式

蚊室 1723

linux_shell笔记(五)

bash作为命令解释器,同时也是高级编程语言。作为命令解释器,他们通过提示符响应并处理用户在命令行界面上输入的命令。而作为一门编程语言,他们将处理存放在所谓shell脚本文件中的命令。如其他编程语言一样,shell也有变量和控制流命令。 当启动shell时,它将运行初始化文件初始化自己。具体运行那个文件取决于该shell是一个登录shell还是一个非登录sh

蚊室 1581

linux_shell笔记(六)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm }-->进程是一条命令在linux上的执行。用户登录时启动的shell,也是一条命令,或者进程。但用户在命令行中输入一个linux工具名时,就启动了一个进程。当用户运行一个shell脚本的时候,系统创建另一个shell进

蚊室 1473

linux_shell笔记(一)

  自由软件:更注重对软件的解放,而非价格上的免费。人工智能:AI--artificialintelligence 麻省理工学院:MIT公共许可协议:GeneralPublic License,GPL POSIX:可移植计算机操作系统接口。PortableSystem Interface for computer Environmen

蚊室 1375

linux_shell笔记(七)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->>rm Untitled/ 1.odt上面命令是对Untitled1.odt执行删除。需要对空格进行转义。make工具可以用来跟踪那些更新过的模块,并确保在编译时使用所有程序模块的最新版

蚊室 796

linux_shell笔记(二)

 文件系统:文件系统是一种数据结构,该数据结构通常驻留在磁盘上,用来组织和管理文件的目录。文件系统用来存储用户工作中用到的数据和系统运行所需的数据。 代表文件系统的结构图是一棵倒挂的树,树根在最上部。这些树都是从根往下生长,并且存在从根到每个文件的路径,每条路径的末端为目录文件或普通文件。向上是指靠近根,向下是指远离根。靠近根的称为父目录,远离根的称为子目录。路径名是跟踪某条从一个

蚊室 784
上一篇: cron,linux定时执行工具详解及实例
下一篇: makefile中的伪目标,强制目标和双冒号规则
terry_linux
博客等级 码龄17年 12粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值