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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【多线程】阻塞队列 | put()方法 | take()方法 | 生产者-消费者模式 |实现阻塞队列

文章目录 阻塞队列1.生产者-消费者模式生产者消费者模型的意义:1.解耦合2.削峰填谷: 2.阻塞队列的使用BlockingQueue 3.实现阻塞队列唤醒:使用阻塞队列实现生产者消费者模型 阻塞队列 阻塞队列是一种特殊的队列: 1.是线程安全的。…

视频自定义字幕,中英文,彩色的,你也可以,不会不知道吧

前言 关于【SSD系列】: 前端一些有意思的内容,旨在3-10分钟里,有所获,又不为所累。 字幕,大家见过吧,其实你也可以,真的可以,真的真的可以。不难,不难,真的…

leetcode1448.统计二叉树中的好节点数目

1. 题目描述 题目链接 2. 解题思路 首先看一下题目的“核心”,什么是好节点:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。也就是说,我们只要知道了从根节点到该节点的所有的值,就可以判断该节点是…

优斯特:防静电包装解决方案的巧妙运用

在现代电子产品生产与运输领域,防静电包装已成为保障产品安全的必备环节。优斯特凭借其创新的防静电包装解决方案,为客户提供了一种巧妙的方式来确保产品在存储和运输过程中不受静电影响,并且不会被刮花或损坏。 静电对产品的影响 静电对电子…

数学建模--深入剖析线性规划(模型全方位解读+代码分析)

1.简介 (1)线性规划三要素 (2)模型适用赛题 2.典例讲解 (1)问题分析 目标函数是净收益尽可能大,风险尽可能小; 约束条件是交易费的分段函数,以及每一笔投资都是非负数&am…

java绘图在ubuntu报错

把JRT网站部署到ubuntu桌面系统上,开始没测试绘图部分功能,只试了连PostGreSql部分正常。后面试了生成位图部分发现报错。 报下面错误: (ColorModel.java:220)\n\tat java.desktop/java.awt.image.BufferedImage.(BufferedImage.java:286)\n…

阿赵UE学习笔记——28、粒子系统Niagara简介

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的使用。这次开始学习粒子系统的使用。 一、Cascade系统 在介绍UE5的Niagara系统之前,必须先介绍一下旧版本的粒子系统。   在UE4的时候,虚幻引擎的粒子系统叫做Cascade&#x…

【iOS】——SDWebImage源码学习

文章目录 一、SDWebIamge简介二、SDWebImage的调用流程SDWebImage源码分析1.UIImageViewWebCache层2.UIViewWebCache层3.SDWebManager层4.SDWebCache层5.SDWebImageDownloader层 一、SDWebIamge简介 SDWebImage是iOS中提供图片加载的第三方库,可以给UIKit框架中的控…

思维导图ai生成软件分享5款好用的!

思维导图ai生成软件分享5款好用的! 在快节奏的信息时代,思维导图作为一种有效的思维整理工具,越来越受到人们的青睐。它能够将复杂的思维过程可视化,帮助我们更好地梳理思路、规划工作。近年来,随着人工智能技术的飞速…

整数运算超越存储单元表示范围:上溢出、下溢出、回绕

示例&#xff1a; /*** brief how about integer-underflow-overflow? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <std…

408数据结构,怎么练习算法大题?

其实考研的数据结构算法题是有得分技巧的 得分要点 会写结构定义&#xff08;没有就自己写上&#xff09;写清楚解题的算法思想描述清楚算法实现最后写出时间和空间复杂度 以上这四步是完成一道算法题的基本步骤&#xff0c;也是其中得分的主要地方就是后面两步。但是前面两…

java-spring 图灵 04

在Spring框架中&#xff0c;可以使用org.springframework.core.io.support.ResourcePatternResolver接口的resolveBasePackage方法来将指定的基础包解析为用于包搜索路径的模式规范。 例如&#xff0c;如果基础包是com.example.app&#xff0c;则可以使用resolveBasePackage方法…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵,网络攻击,流量异常【3】

之前用NSL-KDD数据集做入侵检测的项目是&#xff1a; 【1】https://qq742971636.blog.csdn.net/article/details/137082925 【2】https://qq742971636.blog.csdn.net/article/details/137170933 有人问我是不是可以改代码&#xff0c;我说可以。 训练 我将NSL_KDD_Final_1.i…

Open3D 无效点滤波(32)

Open3D 无效点滤波(32) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 这个算法的目标是从点云数据中去除无效的点,这些无效点可能是由于坐标值为无穷大(inf)或者不是数字(NaN)而产生的。这些无效点可能会导致后续处理步骤出现错误或异常,因此在处理点云数据时需…

品深茶创始人是谁?

据说&#xff0c;品深茶的创始人之前是一个程序员&#xff0c;他在软件行业工作十多年&#xff0c;由于常年熬夜加班再加上抽烟喝酒等不良习惯&#xff0c;导致在一次体检中被查出患上了肾癌&#xff0c;对他来说&#xff0c;期待的财务自由还没实现&#xff0c;身体就已经完蛋…

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

CSS基础:width,height尺寸属性详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web…

vue脚手架CLI的简单使用

目录 初始化脚手架说明具体步骤模板项目的结构main.js入口文件app.vuemain.jsrender main.js 修改默认配置 初始化脚手架 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具&#xff08;开发平台&#xff09;。最新的版本是 4.x。文档: https://cli.vuejs.org/zh/。 具体步骤 …

QFS [VLDB‘13] 论文阅读笔记

原论文&#xff1a;The Quantcast File System (VLDB’13) QFS简介及技术要点 QFS&#xff08;Quantcast File System&#xff09;是由Quantcast开发的一个高效、可扩展的分布式文件系统&#xff0c;旨在提供与Hadoop分布式文件系统&#xff08;HDFS&#xff09;兼容的替代方案…

allure2教程-1-环境搭建

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 自动化测试执行完成后我们需要展示给其他人看&#xff0c;这就要有自动化测试报告了。复杂的测试报告当然可以自己代码实现&#xff0c;但用pytest-html或allure基本也能满足我们生成测试报告的要求了。本小节介绍…