Linux三剑客之awk篇

news2024/11/26 14:47:14

目录

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.coloradmin.cn/o/1599998.html

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

相关文章

软考 - 系统架构设计师 - 嵌入式真题

问题 1: (1).HTML 静态化:可以实现对系统经常访问的页面进行静态化以提高系统访问的效率,但系统页面通常需要数据库中的用户信息和用户选择来动态显示,因此不适合采用。 HTML 静态化: 将动态生成…

20240416如何使用git对本地文件进行上传

0 写在前面 年前收到硕导消息要搭建一下github仓库,一直没倒出时间整理,如今终于有时间搭建,顺带解决出现的问题。 1 安装git 安装git这步比较简单,随手一搜就有很多教程。git的作用主要是一种媒介,连接本地主机与G…

CC工具箱使用指南:【三调三大类面积汇总表(一首歌听到卡带)】

一、简介 群友定制工具。 CC工具箱已经做了一个三大类面积汇总表,奈何大家的模板好像还是都有点不太一样。 群友提供的模板如下: 可以看到,这里的土地权属信息很多,有乡镇、村民委员会、村民小组,还有用地权属信息【…

Linux 指令之文件

1.开发背景 记录 linux 下对文件操作的指令 2.开发需求 记录常用的文件操作指令 3.开发环境 linux 操作系统,如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 查找字符串 查找指定目录下包含指定的字符串 grep -rn "Timer frequency" .…

React间接实现一个动态组件逻辑

在开发一个浏览器插件的时候,用的plasmo框架和react支持的,里面使用react开发一个菜单功能,但是又不想使用react-router,所以就想着能不能使用一个很简单的方式做一个替代方案?那肯定是可以。 我在引入一个组件后&…

OneTab:一键收纳浏览器标签页,告别繁杂浏览

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、OneTab二、主要功能三、安装方法1、Chrome应用商店(需科学)2…

【教学类-52-05】20240417动物数独(4宫格)黏贴卡片需要至少几张?难度1-9 打印版

作品展示: 背景需求: 实际打印的是以下代码生成的动物数独(2*2)学具 【教学类-52-03】20240412动物数独(4宫格)难度1-9 打印版-CSDN博客文章浏览阅读1.1k次,点赞30次,收藏17次。【教…

zabbix 简单介绍 及部署

目录 一 监控软件作用 1,生产环境常见框架 2,监控软件的必要性 3,常见监控软件 二 zabbix 简介 1,zabbix 是什么 2,zabbix 干什么 3,zabbix 组件 3.1 zabbix server 3.2 zabbix agent 4&a…

Vue Router基础知识整理

Vue Router基础知识整理 1. 安装与使用(Vue3)安装使用 2. 配置路径别名和VSCode路径提示(了解)3. 使用查询字符串或路径传参query动态路由 与 params 4. router-link、定义别名、定义路由名称、编程式导航定义别名 aliasrouter-li…

由于找不到krpt.dll,无法继续执行代码的5种解决方法

在正常使用电脑的过程中,当尝试启动某个应用程序或者执行特定功能时,系统突然弹出一个错误提示窗口,明确指出由于缺失关键性文件——krpt.dll,导致当前运行的软件无法正常读取并执行相应的程序代码,进而无法顺利完成预…

HG泄露(ctfhub)

工具准备:dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇(内含安装以及使用方法)_dvcs-ripper-CSDN博客 dvcs-ripper:一款perl的版本控制软件信息泄露利用工具,支持bzr、cvs、git、hg、svn... tree //树状…

故障转移-redis

4.4.故障转移 集群初识状态是这样的: 其中7001、7002、7003都是master,我们计划让7002宕机。 4.4.1.自动故障转移 当集群中有一个master宕机会发生什么呢? 直接停止一个redis实例,例如7002: redis-cli -p 7002 sh…

Ubuntu22.04配置ROS2+PX4仿真环境

Ubuntu22.04配置ROS2PX4仿真环境 主要参考源: https://blog.csdn.net/weixin_44174421/article/details/135827130 https://blog.csdn.net/Zecet/article/details/130474620 一、准备工作 确保网络能够连接到github,出错主要源自于此;确保…

绝地求生更新反作弊系统“ZAKYNTHOS”杀疯了

绝地求生的反作弊系统“ZAKYNTHOS”近期取得了显著的成绩。从2024年1月1日至3月3日,共有117,3588个违规账号被封禁,其中107,3317个账号因使用外挂而被永久封禁。 根据官方每周封禁数据公告,1月至3月每周的永久封禁违规账号平均数高达13万&am…

牛客网刷题 | BC51 及格分数

描述 KiKi想知道他的考试分数是否通过,请帮他判断。从键盘任意输入一个整数表示的分数,编程判断该分数是否在及格范围内,如果及格,即:分数大于等于60分,是输出“Pass”,否则,输出“…

MDC使用手册精讲

MDC 背景: 线上排查问题时,请求在多个微服务之间进行调用,并发量较大的情况下,想跟踪某一个请求的链路,是需要花费一些时间才能梳理出来,而且还依赖于你的业务字段。而我们需要的是快速定位,快…

共享桌面,3分钟自己实现一个吧,还能听见麦克风声音哦

前言 关于【SSD系列】: 前端一些有意思的内容,旨在3-10分钟里, 500-1000字,有所获,又不为所累。 共享桌面程序,哇,高大尚耶!其实不然,让我带你3分钟实现桌面共享程序&am…

9.Hexo通过partial文件传值和改变CSS属性

partials 基本上是可以在自己的HTML文件或.ejs文件中定义网站中不同组件的方法 如果想要为网站定义一个标头,这个标头将会很好地出现在网站的每个页面上 用partials可以创建一个.ejs文件,可以将该标头的所有代码存储在该文件中,然后当想要在…

面向对象的C++题目以及解法2

01串排序 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; class String { public:string str; String(const string& s) : str(s) {} int length() const {return str.length();}i…

预分频器×重装载值)/LSI频率 为什么等于总时间

1. 第一种算法理解&#xff1a;分频系数 64 &#xff0c;外部低速时钟40khz&#xff0c; 则一次计数周期1.6ms &#xff0c;计数625个数&#xff0c;则有625个周期 &#xff0c;1.6ms*625 等于1s 如果分频系数是64&#xff0c;外部低速时钟&#xff08;LSI&#xff09;频率是…