Linux三剑客之awk篇

目录

1、awk

1.1、awk参数

1.2、awk变量

1.3、awk分割符

1.3.1、FS

1.3.2、OFS

1.3.3、RS

1.3.4、ORS

1.3.5、NF

1.3.6、NR

1.3.7、FNR

1.3.8、FILENAME

1.3.9、ARGC与ARGV

1.4、自定义变量

1.5、printf格式化输出

1、awk

作用:具有强大的文本格式化的处理能力,也是一种编程语言,支持条件判断、数组、循环、运算等功能;awk早期在Unix实现,Linux使用的awk实际是gawk(GUN awk)。

 

语法: awk [options] 'pattern{action}' file...

  • options:可选参数
  • pattern:模式/条件
  • action:动作,最常使用的是:print 与 printf

1.1、awk参数

参数

作用

-F

指定分隔符

-v

定义或修改一个awk内部变量

-f

从脚本文件中读取awk命令

1.2、awk变量

变量类型:

  • 内置变量
  • 自定义变量

内置变量

作用

FS

输入字段分隔符,默认为空白字符

OFS

输出字段分隔符,默认为空白字符

RS

输入记录分隔符,指定输入时的换行符

ORS

输出记录分隔符,指定输出时的换行符

NF

当前行的字段的个数(即当前的行按照指定分隔符或默认分隔符,分割成了几列),字段数量,对应英文:number of Field

NR

行号,当前处理文本行的行号

FNR

各个文件分别计数的行号,针对多个文件使用

FILENAME

当前处理的文件的文件名

ARGC

命令行参数的个数

ARGV

数组,存储命令行所给定的每个参数

1.3、awk分割符

说明:awk默认以空格为分割符,多个空格也识别为一个空格,作为分隔符;awk是按行处理文件,根据用户指定的分隔符去工作,没有就使用默认分割符空格。

  • $n:指定分割符后,当前记录的第n个字段
  • $0:完整的输入记录,表示当前行的全部数据

注意事项:awk 外层必须是单引号,内层使用双引号,使用双引号的括起来的内容会识别为文本(字符串)

1.3.1、FS

  • 作用:输入字段分隔符,默认为空白字符

示例:指定输入分隔符#,输出第1列和第3列的内容

  • 命令:awk -F '#' '{print $1,$3}' student_table 或 awk -v FS='#' '{print $1,$3}' student_table

1.3.2、OFS

  • 作用:输出字段分隔符,默认为空白字符
  • awk 执行完成命令,默认以空格作为输出符,对输出内容进行分隔。
  • 使用OFS指定输出分隔符,必须要和-v参数选项结合使用

示例:指定输出分割符#,输出第1列和第3列的内容

  • 命令:awk -v OFS='#' '{print $1, $3}' student_table

1.3.3、RS

  • 作用:输入记录分隔符,指定输入时的换行符,默认是回车换行符。
  • 可以自定义指定的输入换行符

示例:指定使用#作为文件内容的输入换行符,并输出对应的行号

  • 命令:awk -v RS='#' '{print NR, $0}' student_table

1.3.4、ORS

  • 作用:输出记录分隔符,指定输出时的换行符,默认以回车符作为换行符,即每行的结束使用回车符作为换行符。
  • 可以自定义输出换行符。

示例:指定使用&作为输出内容的换行符,输出第1列和第3列的内容

  • 命令:awk -F '#' -v ORS='&' '{print $1.$3}' student_table

1.3.5、NF

  • 作用:当前行的字段的个数(即当前的行按照指定分隔符或默认分隔符,分割成了几列),字段数量
  • 注意事项:NF作为一个常量表示当前行被指定字符分割后的总字段数,使用$NF,表示取最后一列的内容,$(NF-1),表示取倒数第二列的内容

示例:打印文件student_tabl当前行字段以#分割符分割后的总数,并取出文件的最后一列和倒数第二列

  • 命令:awk -F '#' '{print NF, $NF, $(NF-1)}' student_table

1.3.6、NR

  • 作用:行号,当前处理文本行的行号
  • 注意:NR是一个常量,如果和$使用就表示的取的第NR行的第NR个字符

示例如下:

示例1:取文件第二行到第六行的内容

  • 命令:awk ’NR==2,NR==6{print NR, $0}‘ student_table 或 awk 'NR>=2{print NR, $0}' student_table

1.3.7、FNR

  • 作用:各个文件分别计数的行号,针对多个文件使用
  • 注意:如果只是用NR,输出结果会将多个文件按照顺序排列

示例:将文件student_table和student_table2分别按照各自文件的行号展示

  • 命令:awk '{print FNR,$0}' student_table student_table2

1.3.8、FILENAME

  • 作用:当前处理的文件的文件名
  • 注意:使用该参数显示的是当前处理行的文件名

示例:显示当前行所属的文件名,行号,对应行的内容

  • 命令:awk '{pirnt FILENAME, FNR, $0}' student_table student_table2

1.3.9、ARGC与ARGV

  • ARGC:命令行参数的个数
  • ARGV:数组类型,存储命令行所给定的每个参数

示例:打印当前awk命令的参数以及对应的每个参数 ,并对显示结果做去重展示。

  • 命令:awk -F '#' '{print ARGC, ARGV[0],ARGV[1],ARGV[2]}' student_table student_table2 | uniq -d

1.4、自定义变量

方式一:使用-v 参数选项指定

示例:定义变量name,并使用awk输出name的内容

  • 命令:awk -v name='Tom' '{print "My name is " name}' student_table

方式二:直接内部定义

示例:定义变量name,并使用awk输出name的内容

  • 命令:awk 'name="Tom"{print "My name is " name}' student_table 或 awk 'BEGIN{name="Tom"}{print "My name is " name}' student_table

方式三:引用全局变量

示例:定义全局变量name,并使用awk输出name的内容

  • 命令:
    • name="Tom"
    • awk -v name=$name '{print "My name is " name}' student_table

1.5、printf格式化输出

作用:用于对文件进行格式化输出,美化格式。

1、print与printf的区别

  • 使用printf需要指定format格式
  • format用于指定后面每个item的输出格式
  • printf不会自动打印换行符:\n

2、format格式

注意:format格式的指示符都以%开头,后面跟一个字符

  • %s:显示字符串
  • %c:显示字符的ASCII码
  • %d、%i:显示十进制整数
  • %e、%E:显示数值的科学计数法形式
  • %f:显示浮点数
  • %u:显示无符号整数

3、printf修饰符

  • -:左对齐,默认右对齐
  • +:显示数值符号;如:printf “%+d” 20 ,打印结果为:+20

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

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

相关文章

代码随想录刷题随记23-回溯3

代码随想录刷题随记23-回溯3 39. 组合总和 leetcode链接 注意同一个 数字可以 无限制重复被选取 怎么体现这个可以重复取的思想很重要 解题代码&#xff1a; class Solution { public:void backtrace( vector<vector<int>>& ret,vector<int> &pat…

腾讯清华联合提出图像到视频生成方法-Follow-Your-Click:点击图像并加上简单提示词就可让图像动起来!

Follow-Your-Click只需单击一次和简短的提示就可以让图像的某一部分动起来&#xff0c;还支持不同的动作表达&#xff0c;比如微笑&#xff0c;悲伤&#xff0c;跳舞…… 相关链接 论文链接&#xff1a;https://arxiv.org/abs/2403.08268 项目链接&#xff1a;https://github…

vue.js入门

vue是一个渐进js框架 渐进式:按需引入Vue.js的部分功能,不用把整个框架都导入 1. 传统开发方式 用vue.global.js <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"…

当当图书网数据采集分析:10万条数据的深入洞察

基于搜索结果&#xff0c;我将为您提供一个关于当当图书网数据采集的文章框架&#xff0c;假设我们已经有了10万条数据的采集结果。请注意&#xff0c;由于没有具体的数据文件&#xff0c;以下内容将是一个示例性的框架&#xff0c;您可以根据实际采集到的数据进行填充和调整。…

1.2MHz,固定频率白光LED驱动器

一、产品概述 TX6216是一款升压转换器&#xff0c;设计用于通过单节锂离子电池驱动多达7个串联的白光LED。 TX6216采用电流模式&#xff0c;固定频率架构来调节LED电流&#xff0c;LED电流通过外部电流检测电阻测量。其低104mV反馈电压可降低功率损耗并提高效率。 TX6216具有…

懒人建站工具过时了?试试这6个WordPress主题,1小时实现高效建站

懒人建站工具&#xff0c;凭借简单易用、快速上手和个性化定制的特点&#xff0c;为不熟悉代码和程序的人提供了搭建美观实用网站的便捷途径。无需专业的前端开发知识&#xff0c;无需雇佣专业开发人员&#xff0c;用户便能轻松实现网站搭建&#xff0c;满足个人或企业需求。懒…

13.C++常用的算法_查找算法

文章目录 遍历算法1. adjacent_find代码工程运行结果 2. binary_search()代码工程运行结果 3. count()代码工程运行结果 4. count_if()代码工程运行结果 遍历算法 1. adjacent_find 代码工程 查找相邻元素是否存在,不存在返回容器最后位置的迭代器#define _CRT_SECURE_NO_WA…

Rustdesk如何编译代码实现安装后,不会在右下角出现托盘图标

环境&#xff1a; Rustdesk1.1.9 问题描述&#xff1a; Rustdesk如何编译代码实现安装后&#xff0c;不会在右下角出现托盘图标 解决方案&#xff1a; 安装后只有自定义进程图标 详细方案&#xff0c;有需要私聊

2023年城市交通系统客流量预测算法赛

ref: 2023中国华录杯数据湖算法大赛 该比赛马上就要结束&#xff0c;0424日答辩。获得了前六的名次&#xff0c;本次比赛给我的感觉就是一言难尽呐。答辩结束再补充吧。

PySpark预计算ClickHouse Bitmap实践

1. 背景 ClickHouse全称是Click Stream&#xff0c;Data WareHouse&#xff0c;是一款高性能的OLAP数据库&#xff0c;既使用了ROLAP模型&#xff0c;又拥有着比肩MOLAP的性能。我们可以用ClickHouse用来做分析平台快速出数。其中的bitmap结构方便我们对人群进行交并。Bitmap位…

中国新质生产力水平(原始+测算+结果)-企业和各省数据集

新质生产力是一个至少涵盖科技、绿色和数字三大方面的集成体&#xff0c;对其评价测度需要依托多属性综合评价方法。文章构建了包含3个一级指标、6个二级指标和18个三级指标的综合体系&#xff0c;采用改进的熵权-TOPSIS方法对指标进行赋权&#xff0c;从而得到全国新质生产力发…

rhce.定时任务和延迟任务项目

一 . 在系统中设定延迟任务要求如下&#xff1a; 在系统中建立 easylee 用户&#xff0c;设定其密码为 easylee 延迟任务由 root 用户建立 要求在 5 小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有 root 用户和easylee用户可以…

Spring学习(二)

图解&#xff1a; 2.核心容器总结 2.2.1 容器相关 BeanFactory是IoC容器的顶层接口&#xff0c;初始化BeanFactory对象时&#xff0c;加载的bean延迟加载 ApplicationContext接口是Spring容器的核心接口&#xff0c;初始化时bean立即加载 ApplicationContext接口提供基础的be…

阿里云优惠券种类介绍及领取教程详解

随着互联网技术的快速发展&#xff0c;越来越多的企业和个人开始将业务和数据迁移到云端。阿里云作为国内领先的云服务提供商&#xff0c;为广大用户提供了丰富多样的云产品和服务。为了回馈用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中优惠券就是其中一种常见…

设计编程网站集:动物,昆虫,蚂蚁养殖笔记

入门指南 区分白蚁与蚂蚁 日常生活中&#xff0c;人们常常会把白蚁与蚂蚁搞混淆&#xff0c;其实这两者是有很大区别的&#xff0c;养殖方式差别也很大。白蚁主要食用木质纤维&#xff0c;会给家庭房屋带来较大危害&#xff0c;而蚂蚁主要采食甜食和蛋白质类食物&#xff0c;不…

【Linux】服务器硬件及RAID配置实战

目录 一、服务器 1.服务器 2.查看服务器信息 二、RAID 磁盘阵列 三、软RAID的创建和使用 1.添加硬盘&#xff0c;fdisk分区&#xff0c;分区类型ID设置为 fd 2.使用mdadm创建软raid 3.格式化 4.挂载使用 5.mdadm 一、服务器 1.服务器 分类机架式居多 塔…

ubuntu安装vulnhub

文章目录 1.下载docker2.申请加速器3.安装pip4.安装docker-compose5.安装git6.安装vulnhub文件7.运行vulhub中的靶机TypeError: kwargs_from_env() got an unexpected keyword argument ssl_version报错8.tomcat-----CVE-2017-12615(任意文件上传)1.访问192.168.9.101:80802.bp…

【解读】《中华人民共和国网络安全法》:所有IT从业者都应知应懂

随着网络的快速发展&#xff0c;当今社会存在的网络安全问题也是接踵而来&#xff1a;网络入侵、网络攻击等非法活动威胁信息安全&#xff1b;非法获取公民信息、侵犯知识产权、损害公民合法利益&#xff1b;宣扬恐怖主义、极端主义&#xff0c;严重危害国家安全和社会公共利益…

彻底解决 pyshark 库 TShark not found

使用 python 运行 github 某个项目处理 pcap 包时遇到如下报错&#xff1a; &#xff08;先安装了 pyshark 库&#xff09; pyshark.tshark.tshark.TSharkNotFoundException: TShark not found. Try adding its location to the configuration file. Searched these paths: […

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化&#xff0c;LDA&#xff08;树图&#xff09;、关系图、词云、时间趋势&#xff08;折线图&#xff09;、热度地图、词典情感分析&#xff08;饼图和3D柱状图&#xff09;、词向量神经网络情感分析、tfidf聚类、词向量聚类…