当前位置: 首页 > news >正文

Linux|了解如何使用 awk 内置变量

引言

当我们揭开 Awk 功能部分时,我们将介绍 Awk 中内置变量的概念。您可以在 Awk 中使用两种类型的变量:用户定义的变量和内置变量。

alt

内置变量的值已经在 Awk 中定义,但我们也可以仔细更改这些值,内置变量包括:

  1. FILENAME :当前输入文件名(不要更改变量名)
  2. FR :当前输入行号(即输入行1、2、3……以此类推,不要更改变量名)
  3. NF :当前输入行中的字段数(不要更改变量名称)
  4. OFS :输出字段分隔符
  5. FS :输入字段分隔符
  6. ORS:输出记录分隔符
  7. RS : 输入记录分隔符

实战

让我们继续说明上面一些 Awk 内置变量的使用:

要读取当前输入文件的文件名,可以使用 FILENAME 内置变量,如下所示:

awk ' { print FILENAME } ' ~/domains.txt 
alt

您将意识到,每个输入行都会打印出文件名,这是当您使用 FILENAME 内置变量时 Awk 的默认行为。

使用 NR 来计算输入文件中的行(记录)数,请记住,它还会计算空行,正如我们将在下面的示例中看到的那样。

当我们使用cat命令查看domains.txt文件时,它包含14行文本和2行空:

cat ~/domains.txt
alt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 
alt

要计算记录或行中的字段数,我们使用 NR 内置变量,如下所示:

cat ~/names.txt
alt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
alt

接下来,您还可以使用 FS 内置变量指定输入字段分隔符,它定义 Awk 如何将输入行划分为字段。

FS 的默认值是空格和制表符,但我们可以将 FS 的值更改为任何字符,以指示 Awk 相应地划分输入行。

有两种方法可以做到这一点:

  1. 一种方法是使用 FS 内置变量
  2. 第二个是调用 -F Awk 选项

考虑Linux系统上的文件/etc/passwd,该文件中的字段使用:字符分隔,因此当我们想要过滤掉某些字段时,我们可以将其指定为新的输入字段分隔符,如下例所示:

我们可以使用 -F 选项,如下所示:

awk -F':' '{ print $1, $4 ;}' /etc/passwd
alt

或者,我们还可以利用 FS 内置变量,如下所示:

awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd
alt

要指定输出字段分隔符,请使用 OFS 内置变量,它定义如何使用我们使用的字符分隔输出字段,如下例所示:

awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
alt

在本文中,我们探讨了使用带有预定义值的 Awk 内置变量的想法。但是我们也可以更改这些值,不过,不建议这样做,除非您知道自己在做什么,并且有足够的理解。

本文由 mdnice 多平台发布

http://www.lryc.cn/news/345160.html

相关文章:

  • 代码随想录-算法训练营day29【回溯算法05:递增子序列、全排列】
  • 704. 二分查找
  • php回车变br、php显示br
  • 找最大数字-第12届蓝桥杯国赛Python真题解析
  • 蓝桥杯 算法提高 ADV-1170 阶乘测试 python AC
  • 阿里巴巴杭州全球总部正式启用,创新“减碳大脑”科技减碳 | 最新快讯
  • 蓝桥杯国赛练习题真题Java(矩阵计数)
  • 概念解析 | ROC曲线:评估分类模型
  • 数据可视化训练第二天(对比Python与numpy中的ndarray的效率并且可视化表示)
  • 【Java EE】数据库连接池详解
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.4讲 GPIO中断实验-IRQ中断服务函数详解
  • 如何平衡RPA机器人的安全性与业务敏捷性,同时不牺牲用户体验?
  • 地球行星UE5和UE4
  • 7.k8s中的名称空间namespace
  • 上海企业源代码防泄密解决方案,企业源代码防泄密如何应对?
  • 将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 4
  • OpenSearch 与 Elasticsearch:7 个主要差异及如何选择
  • [Docker]容器的网络类型以及云计算
  • VMP 简单源码分析(.net)
  • 数据结构与算法学习笔记-二叉树的顺序存储表示法和实现(C语言)
  • 如何在Windows和Linux中杀死Python进程
  • 零基础怎么快速进行单细胞分析?
  • 力扣数据库题库学习(5.10日)--1965. 丢失信息的雇员
  • 漫威争锋Marvel Rivals怎么搜索 锁区怎么搜 游戏搜不到怎么办
  • SpringBoot实现统一返回值+全局异常处理
  • windows连接CentOS数据库或Tomcat报错,IP通的,端口正常监听
  • 超详细的胎教级Stable Diffusion使用教程(一)
  • 流媒体服务器(20)—— mediasoup 之媒体流score评分计算(一)
  • 用keras识别狗狗
  • Sass语法介绍-变量介绍