SHELL(05)

SHELL(04)

[ awk ]

  • awk 编程语言 / 数据处理引擎

    • 创造者的缩写是 : A,W,K

    • 基于模式匹配检查输入文本 , 逐行处理并输出

    • 通常用于Shell脚本中 , 获取指定的数据

    • 单独使用时 , 可对文本数据做统计

  • grep 简单易用 , 功能少只能查

  • sed 功能齐全 , 搜索精度低 # 逐行处理

  • awk 搜索精度高 , 可以简单的排版等 , 不能做到非交互式操作 #逐行处理

格式
  • awk [ 选项 ] ’ [ 条件 ] { 处理动作 } ’ 文件列表
  • 命令 | awk [ 选项 ] ’ [ 条件 ] { 处理动作 } ’
cat test.txt
1 2 3
4 5 6awk '{print $1,$3}' test.txt
1 3
4 6
选项 [ -F ]
  • 常用 [ -F ] 选项

  • 定义分隔符

  • 当文档中没有 空格 时 , 默认为一行内容 , 此时需要定义分隔符

  • 处理文本时 , 默认将 空格 , 制表符作为分隔符

print 指令
  • print 是常用的编辑指令

  • 若有多条编辑指令 , 可用分号分割

  • Awk过滤数据时 , 支持仅打印某一列 , 如第二列 , 第三列

  • 当定义了条件且指令就是print时可以省略指令不写

awk -F: '$7~/bash/&&$3<=500' user       #找第7列包含bash并且第3列小于等于500的行
条件 ’ / 字符串/ ’
常用内置变量

[ $0 ] ---------- 文本当前的全部内容

[ $1 ] ---------- 文本的第一列

[ $2 ] ---------- 文本的第二列

[ NR ] ---------- 文本当前行的行号

[ NF ] ---------- 文本当前行的列数( 有几列 )

print , 条件 , 内置变量
awk '{print}' abc.txt                #输出所有
awk '/to/{print}' abc.txt            #输出有to的那行
awk '{print $2}' abc.txt            #输出所有行的第2列
awk '/to/{print $1}' abc.txt        #输出有to的那行的第1列
awk '{print $0}' abc.txt            #输出所有行所有列
awk '{print $0,$1}' abc.txt        #输出所有行所有列,第1列
awk '{print NR}' abc.txt            #输出所有行的行号
awk '{print NR,$0}' abc.txt        #输出所有行的行号,所有列
awk '{print NR,NF}' abc.txt        #输出所有行的行号,列号(有几列)
[ -F ] 定义分割符
  1. 定义一个分隔符

    定义 ’ : ’ 为分隔符 [ -F: ]

awk -F: '{print $1}'  user       #文档中如果没有空格,可以用F修改分隔符
awk -F: '{print $1,$6}'  user     #使用冒号作为列的分隔符,显示第1、6列
  1. 定义多个分隔符

    定义 ’ : ’ ’ / ’ 为分隔符 ’ -F [ 😕 ] ’

awk -F [:/] '/^root/{print $1,$10}' user
print 输出打印常量
awk -F: '{print $1" 的家目录是 "$6}'  user    #输出常量,加双引号即可
awk -F: '{print $1" 的解释器是 "$7}'  user
格式化输出信息
  • awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行之后做一些总结性质的工作。
  • 格式 :
    • 行前处理 : [ 在读取文件内容前执行 , 执行指令1次 ]
      • awk [ 选项 ] ’ BEGIN {指令} {指令}’
    • 行后处理 : [ 读取文件执行命令后执行 , 执行指令1次 ]
      • awk [ 选项 ] ’ END {指令} ’
    • awk [ 选项 ] ’ BEGIN {指令} {指令} END{指令} ’
    • 无需文档也能打印
awk -F: 'BEGIN{print "start"}{print $1}END{print "over"}' user
awk 'BEGIN{print NR}{print NR}END{print NR}' user
awk [ 条件 ]
  • 正则
    • ’ /正则/ ’
    • ’ ~ ’ 包含
    • ’ !~ ’ 不包含
awk -F: '$6~/root/{print}'  user    #输出第6列包含root的行
awk -F: '$6~/bin/{print}'  user     #输出第6列包含bin的行
awk -F: '$6!~/bin/{print}'  user    #输出第6列不包含bin的行
  • 使用 数字/字符串比较 设置条件

    • ’ == ’
    • ’ != ’
    • ’ > ’ ’ >= ’
    • ’ < ’ ’ <= ’
  awk -F: '$3<3{print}' user            #输出第3列小于3的行awk -F: '$3<=3{print}' user           #输出第3列小于等于3的行awk -F: 'NR==2{print}' user        	  #输出第2行awk -F: 'NR>2{print}' user            #输出行号大于2的行
  • 逻辑条件
    • ’ && ’ AND
    • ’ || ’ OR
    awk -F: 'NR>=3&&NR<=5{print}' user      #找行号是3~5行awk -F: 'NR==2||NR==4{print}' user      #找行号是2或者4的行awk -F: 'NR==2||NR==40{print}' user     #如果只有一个条件满足就显示一个
  • 数学运算
  awk 'NR%2==0{print NR,$0}' user  #在条件中使用运算,找到将行号除以2余数等于0的行,然后输出该行的行号和所有列,相当于输出偶数行
awk 数组
  • 数组 , 是一个可以储存多个值的变量

  • 格式 :

    • 定义数组的格式 : 数组名[ 下标 ]=元素值
    • 调用数组的格式 : 数组名[ 下标 ]
    • 数组内是无序的 , 需要顺序要用 [ sort ]命令进行排序
      • sort #按照顺序排列
      • sort -n #以数值型进行排序,默认使用字符串排序;
      • sort -r #反序排列
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}'    #使用awk测试数组,创建数组a,下标1对应值是10,下标2对应值是20,然后输出下标是2与下标是1的值

awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号

awk 'BEGIN{a["abc"]="abcabc";a["xyz"]="xyzxyz";print a["xyz"]}' 
awk [ for ]循环

for ( 变量名 in 数组名 ) { print 变量名 }

awk  '{a[$1]++}END{print a["abc"]}'  shu.txt
awk  '{a[$1]++}END{for(i in a){print i,a[i]}}' shu.txt
awk  '{a[$1]++}END{for(i in a){print i,a[i]}}' shu.txt | sort

把每行第一列作为a[*]数组 , 进行读取,改写等操作.

a[ $1 ]++ => a[ $1 ]=a[ $1 ]+1 进行计数

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

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

相关文章

探索使用对比损失的孪生网络进行图像相似性比较

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 简介 在计算机视觉领域&#xff0c;准确地测量图像相似性是一项关键任务&#xff0c;具有广泛的实际应用。从图像搜索引擎到人脸识别系统和基于内容的推荐系统&#xff0c;有效比较和查找相似图像的能力非常重要。Siames…

QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题

在 Python 中&#xff0c;深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是用于创建对象副本的两种不同方式。 浅拷贝是创建一个新的对象&#xff0c;该对象与原始对象的内容相同&#xff08;包括内部嵌套对象的引用&#xff09;&…

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…

Day4:学习尚上优选项目

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;尚上优选项目 知识点&#xff1a; 四、 搭建平台管理端前端环境 区域管理模块 代码生成器需求分析区域管理表设计搭建环境开发区域管理接口 整合nginx 安装nginx配置nginx功能测试 商品信息管理模块 需…

LeetCode刷题:无重复字符的最长子串 详解 【3/1000 第三题】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

【THM】Active Reconnaissance(主动侦察)-初级渗透测试

介绍 在网络安全模块的第一个房间里,我们主要进行被动侦察。在第二个房间中,我们重点关注主动侦察以及与之相关的基本工具。我们学习使用网络浏览器来收集有关我们目标的更多信息。此外,我们讨论使用简单的工具(例如ping、traceroute、telnet和 )nc来收集有关网络、系统和…

centos7 安装 nginx

一、yum 方式安装 1.安装yum工具 sudo yum install yum-utils 2. 安装epel yum install epel-release 3.安装nginx&#xff1a; yum install nginx 4.查看版本 nginx -v 5.设置开机自启动 systemctl enable nginx nginx 常用命令&#xff1a; 1&#xff09;启动nginx …

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

题目&#xff1a;给一个不多于5位的正整数&#xff0c;要求&#xff1a;一、求它是几位数&#xff0c;二、逆序打印出各位数字。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog co…

探讨在大数据体系中API的通信机制与工作原理

** 引言 关联阅读博客文章&#xff1a;深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;数据已经成为企业发展和决策的核心。随着数据规模的不断增长…

计算机组成原理实验(汉字编码实验)

&#xff08;汉字编码实验&#xff09; 海明校验码实验

Yarn 包管理器入门指南

一、Yarn 的由来 Yarn 是一个新的 JavaScript 包管理工具,由 Facebook 的工程师们开发,于 2016 年发布。Yarn 的诞生源于 NPM 在使用过程中遇到的一些痛点,如网络效率低下、缓存混乱、安装速度慢等问题。Yarn 秉承了 NPM 的部分理念,同时也做出了一些创新,以期提供更高效、安全…

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

LeetCode-240. 搜索二维矩阵 II【数组 二分查找 分治 矩阵】

LeetCode-240. 搜索二维矩阵 II【数组 二分查找 分治 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;从左下角或者右上角元素出发&#xff0c;来寻找target。解题思路二&#xff1a;右上角元素&#xff0c;代码解题思路三&#xff1a;暴力也能过解题思路四&#xff1a;二分…

家庭网络防御系统搭建-配置流量镜像到NDR系统

由于需要将家庭网络中的全部流量送到NDR分析系统进行分析&#xff0c;因此需要一个具备流量镜像功能的交换机或者路由器。在前面文章所提及的家庭网络架构中&#xff0c;需要一台交换机即可拷贝东西向流量以及南北向流量。当然如果家庭中的路由器或者其他设备具备交换机镜像功能…

基于单片机智能数字温度采集报警器系统设计

**单片机设计介绍&#xff0c;基于单片机智能数字温度采集报警器系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能数字温度采集报警器系统设计的核心目标是通过单片机实现温度的实时采集、显示以及超温报警…

多层感知机与DNN算法

多层感知机与DNN算法 神经网络与深度学习神经网络深度神经网络深度学习常见分类及应用 ensorFlow编程模型1 操作2 张量3 变量4 会话 3 TensorFlow 运行模式构建神经网络模型的工具指南1. 安装 TensorFlow2. 常见深度学习算法的库函数 其他机器学习算法&#xff1a;机器学习实战…

深度学习_NLP常用库报错问题解决

1、SpaCy can‘t find model ‘zh_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 或者 can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 安装最新的版本&#xff1a; en_…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中&#xff0c;我们已经实现网络层与业务层分离&#xff0c;本节实现数据层与业务层分离&#xff0c;降低各层之间的耦合性&#xff0c;同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)

有效的括号 题目思路及实现方式一&#xff1a;栈&#xff08;推荐&#xff09;思路代码实现Java版本C版本(由于C语言需要自己实现栈较为繁琐&#xff0c;此处使用C)Python3版本 复杂度分析 方式二&#xff1a;递归法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相…

UE5 SQLite笔记

开发环境&#xff1a; 系统&#xff1a;Windows 10 64 bit 引擎&#xff1a;Unreal Engine 5.1.1 IDE&#xff1a;JetBrains Rider 2023.2.1 语言&#xff1a;C 工具&#xff1a;DB Browser for SQLite SQLite数据类型&#xff1a; //INTEGER TEXT BLOB REAL NUMERIC/*integer…