Linux Shell 脚本编程学习之【第4章 awk命令最详细(第二部分)】

news2024/11/29 0:35:13

第4章 awk命令最详细 (第二部分)

  • 1 awk编程
    • 1.1 awk模式匹配
  • 2 awk编程示例
    • 2.1 第一种调用方式
    • 2.2 第二种调用方式
    • 2.3 第三种调用方式
    • 2.4 记录和域
    • 2.5 变量运算
    • 2.6 改变分隔符
  • 3 关系和布尔运算符
    • 3.1 匹配正则表达式~符号

1 awk编程

awk 是一种编程语言, gawk 是目前最新的版本,当前的 Linux 版本用的都是 gawk。
三种方式命令格式:
① 在 Shell 命令行输入命令调用 awk, 格式为:

awk [-F 域分隔符]awk 程序段:输入文件

② 将 awk 程序段插入脚本文件,然后通过awk 命令调用它,格式为:

awk  -f  awk脚本文件输入文件

③ 将 sed 命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:

./awk 脚本文件输入文件

1.1 awk模式匹配

任何 awk 语句都由模式 (pattern)和动作 (action)组成。模式是一组用于测试输入行是 否需要执行动作的规则,动作是包含语句、函数和表达式的执行过程。

2 awk编程示例

2.1 第一种调用方式

awk 的第一种调用方式,单引号中间是 awk 命令,该awk 命令由两 部分组成,以/符号分隔,^KaTeX parse error: Expected group after '^' at position 67: …a blank line.”。^̲是正则表达式,表示空白行, print表示该动作是打印操作, test.log是输入文件名称。

[root@localhost 2023]# cat > test.log
12df3

df


dds
a
^C
[root@localhost 2023]# 
[root@localhost 2023]# 
[root@localhost 2023]# 
[root@localhost 2023]# awk '/^$/{print "This is a new line."}' test.log 
This is a new line.
This is a new line.
This is a new line.

2.2 第二种调用方式

[root@localhost 2023]# cat 1.awk 
/^$/{print "this is a new line."}
[root@localhost 2023]# awk -f 1.awk test.log 
this is a new line.
this is a new line.
this is a new line.
[root@localhost 2023]# 

2.3 第三种调用方式

// 可以直接调用脚本
[root@localhost 2023]# ./1.awk test.log 
this is a new line.
this is a new line.
this is a new line.
[root@localhost 2023]# cat 1.awk 
#!/bin/awk -f
/^$/{print "this is a new line."}
[root@localhost 2023]# chmod u+x 1.awk 
[root@localhost 2023]# ./1.awk test.log 
this is a new line.
this is a new line.
this is a new line.

2.4 记录和域

awk 认为输入文件是结构化的, awk 将每个输入文件行定义为记录,行中的每个字符串 定义为域,域之间用空格、 Tab 键或其他符号进行分隔,分隔域的符号叫做分隔符。
在这里插入图片描述

[root@localhost 2023]# awk '{print ($3,$2,$1,$4)}' test.log 
column3 column2 column1 column4
sldf ddf 123 woem
xiezi kanbao dushu huahua
// $0 指打印全部列
[root@localhost 2023]# awk '{print ($0)}' test.log 
column1 column2 column3 column4
123 ddf sldf woem
dushu kanbao xiezi huahua
[root@localhost 2023]# 

2.5 变量运算

[root@localhost 2023]# awk 'BEGIN {ONE=1;TWO=2} {print $(ONE+TWO)}' test.log 
column3
sldf
xiezi
[root@localhost 2023]# 

2.6 改变分隔符

// 默认用空格分隔
[root@localhost 2023]# awk '{print ($3)}' test.log 
column3
sldf
xiezi
// 适用制表符分隔
[root@localhost 2023]# awk -F"\t" '{print ($3)}' test.log 
column4
woem
huahua

// 使用逗号做分隔符
[root@localhost 2023]# awk 'BEGIN {FS=","} {print $0}' test.log 
Li  Hao,njue,025-83481010
Zhang  Ju,nju,025-83466534
Wang Bin,seu,025-83494883
Zhu  Lin,njupt,025-83680010
[root@localhost 2023]# awk 'BEGIN {FS=","} {print $1,$3}' test.log 
Li  Hao 025-83481010
Zhang  Ju 025-83466534
Wang Bin 025-83494883
Zhu  Lin 025-83680010
[root@localhost 2023]# 

两个字符的分隔符

#下面是对FS 变量的两种赋值
(1)FS="\t"
(2)FS="\t+"
#下面是一条示例性记录
wza\t\tcq
--说明:第(1)FS 赋值将一个Tab 键作为分隔符,第(2)种以一个或多个Tab键作为分隔符,当解析下面这条示例性记录时,两种赋值将产生不同的结果。第(1)种将其解析为三个域: wza、 空域、 cq,(2)种将其解析为两个域: wza 和 cq。

3 关系和布尔运算符

运 算 符意 义
<小于
>大于
<=小于等于
>=大于等于
==等于
!=不等于
~匹配正则表达式
!~不匹配正则表达式

3.1 匹配正则表达式~符号

[root@localhost 2023]# awk 'BEGIN {FS=":"} $1~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost 2023]# awk 'BEGIN {FS=":"} $0~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost 2023]# awk 'BEGIN {FS=":"} $0!~/nologin/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
db2inst1:x:1001:901::/home/db2inst1:/bin/bash
db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
db2as:x:1003:903::/home/db2as:/bin/bash
xj:x:808:809::/home/xj1:/bin/bash
[root@localhost 2023]# 
// awk命令利用if语句匹配第3域小于第4域的记录
[root@localhost 2023]# awk 'BEGIN {FS=":"} {if($3<$4) print $0}' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
xj:x:808:809::/home/xj1:/bin/bash
[root@localhost 2023]# 

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

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

相关文章

【C++11】智能指针的定义 和 种类 及 使用

智能指针 定义 为什么需要智能指针 在C中&#xff0c;动态分配内存是一项常见的任务&#xff0c;但手动管理分配和释放内存可能会导致很多问题&#xff0c;如内存泄漏、悬垂指针以及多次释放同一块内存等。为了避免这些问题&#xff0c;引入了智能指针的概念&#xff0c;它们…

MySQL主从复制原理及配置

目录 一、MySQL主从复制原理 1、什么是主从复制 2、主从复制原理 二、主从复制配置 1、主服务器数据库配置 &#xff08;1&#xff09;设置server-id值并开启binlog参数&#xff0c;启用二进制日志功能后&#xff0c;重启数据库。 &#xff08;2&#xff09;建立同步账号&a…

LabVIEW基础-lvlib库

文章目录 lvlib库llb库lvlib与llb的区别lvlib常见错误断开vi与库之间的连接 lvlib库 文件-新建-库&#xff0c;创建一个项目库文件。能在项目中创建的文件类型&#xff0c;都可以在库中创建。 在lvlib上右键-添加-文件&#xff0c;将被选中的文件放到lvlib中。被添加进lvlib的…

【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】

查询执行 查询执行概述查询执行策略可优化语句和数据定义语句四种执行策略策略选择实现Portal执行的过程 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的…

大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

即时通信的方法和webSocket的具体使用

前言 之前遇到过需要即时通讯的场景&#xff0c;刚开始使用的是通过轮询的方式&#xff0c;定时器3秒向服务器请求一次数据&#xff0c;后面发现如果在手机端长时间打开使用此功能的页面&#xff0c;可能会发生手机发热&#xff0c;甚至卡顿的现象。最后改用webSocket&#xf…

js 过滤两个数组中的相同元素

1. filter 和 find 、some ,includes结合使用 let arr [1, 2, 3, 4, 5]; let arr2 [3, 4, 5, 6, 7];const arr3 arr.filter((item) > arr2.includes(item)); const arr4 arr.filter((item) > arr2.find((item2) > item2 item)); const arr5 arr.filter((item)…

Vue3+ElementPlus+TS实现右上角消息数量实时更新

Vue3ElementPlusTS实现右上角消息数量实时更新 背景 项目需求&#xff0c;前端右上角铃铛图标 显示接收到的消息通知&#xff0c;并且显示消息数量以及实时更新。&#xff08;一般是点击操作按钮后增加一条消息通知&#xff0c;图标上的数字也随之更新&#xff09; 【原来的想…

uniapp 微信小程序 姓名脱敏 substring报错问题:Cannot read property ‘substring‘ of undefined

效果图&#xff1a; 刘德华----------刘* 加v-if判断是因为如果是后台数据返回的字段&#xff0c;如果不加判断&#xff0c;substring的时候有可能数据还没渲染完&#xff0c;会报错 <text v-if"userName">{{userName.substring(0, 1) *}}</text>

【Duilib】错误:红色波浪线,无法打开源文件“stdafx.h”

问题 Duilib工程可以编译&#xff0c;但是智能提示&#xff1a;错误&#xff1a;红色波浪线&#xff0c;无法打开源文件“stdafx.h”。 解决方法 1、确认stdafx.h文件位置在vcxproj文件同一目录&#xff0c;并且stdafx.h已添加至DUILIB工程。 2、DUILIB项目属性\C/C\常规 页面…

(css)原生html实现遮罩层弹窗

(css)原生html实现遮罩层弹窗 效果&#xff1a; html <div class"overlay"><div class"content"><!-- 需要遮罩的内容 --> <el-table :data"tableData" size"mini" class"table-class" border stripe…

AutoSAR系列讲解(实践篇)7.4-实验:配置SWCRTE

注意: 实验篇是重点,有条件的同学最好跟着做一遍,然后回头对照着7.1-7.3理解其配置的目的和意义。实验下篇将在7.7节中继续做 一、实验概览 1、实验目的 通过本次实验,主要是让大家对Dev的配置有一个全流程的学习。这里会用到前两节的内容,将其串联起来,让大家能完整的…

【git基本使用】

初识git 一、git安装 1.1 Linux-centos 如果你的的平台是centos&#xff0c;安装git相当简单&#xff0c;以我的centos7.6为例&#xff1a; ⾸先&#xff0c;你可以试着输⼊Git&#xff0c;看看系统有没有安装Git&#xff1a; git-bash: git: command not found 出现像上⾯…

linux同时安装JDK8和JDK11并指定默认版本

1、安装OpenJDK11 yum install java-11-openjdk2、安装OpenJDK 8 yum install java-8-openjdk3.查看Java版本列表 alternatives --list4、查看当前Java版本 java -version5、更改Java版本 alternatives --config java6、设置JAVA_HOME环境变量 vi /etc/profile.d/java.sh…

多线程(JavaEE初阶系列3)

目录 前言&#xff1a; 1.中断一个线程 2.等待一个线程-join() 2.1join()无参调用的使用 2.2join()有参调用的使用 3.线程的状态 3.1观察线程的所有状态 4.多线程带来的风险—线程安全 4.1观察线程不安全 4.2该问题出现的原因 4.3线程不安全问题的解决 4.3.1synchro…

【PostgreSQL内核学习(九)—— 查询执行(数据定义语句执行)】

数据定义语句执行 概述数据定义语句执行流程执行示例 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL…

【Python数据分析】Python基础知识篇

&#x1f389;欢迎来到Python专栏~Python基础知识篇 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大…

vue中使用原生的table合并行

完整的代码&#xff1a; <template><table border"1"><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><template v-for"(item, index) in tableData"><templat…

Hbase基本原理剖析

一、基本原理 数据存储使用HBase来承接&#xff0c;HBase是一个开源的、面向列&#xff08;Column-Oriented&#xff09;、适合存储海量非结构化数据或半结构化数据的、具备高可靠性、高性能、可灵活扩展伸缩的、支持实时数据读写的分布式存储系统。更多关于HBase的信息&#…

fpga4fun—发光二极管

发光二极管电子基础知识 LED&#xff08;发光二极管&#xff09;是一种半导体器件&#xff0c;当电流通过它时会产生光。 LED 符号看起来像一个二极管&#xff0c;带有阳极 &#xff08;&#xff09; 和阴极 &#xff08;-&#xff09;。 LED 的作用类似于二极管 - 单向导电&…