awk的内置函数_awk引用变量

awk的内置函数_awk引用变量awk 系列Part10:如何使用 awk 内置变量

大家好,又见面了,我是你们的朋友全栈君。

awk 系列:如何使用 awk 内置变量

我们将逐渐揭开 awk 功能的神秘面纱,在本节中,我们将介绍 awk 内置(built-in)变量的概念。你可以在 awk 中使用两种类型的变量,它们是:用户自定义(user-defined)变量(我们在第八节中已经介绍了)和内置变量。

awk 系列Part10:如何使用 awk 内置变量

awk 内置变量示例

awk 内置变量已经有预先定义的值了,但我们也可以谨慎地修改这些值,awk 内置变量包括:

  • FILENAME : 当前输入文件名称
  • NR : 当前输入行编号(是指输入行 1,2,3……等)
  • NF : 当前输入行的字段编号
  • OFS : 输出字段分隔符
  • FS : 输入字段分隔符
  • ORS : 输出记录分隔符
  • RS : 输入记录分隔符

让我们继续演示一些使用上述 awk 内置变量的方法:

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

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

awk 系列Part10:如何使用 awk 内置变量

awk FILENAME 变量

你会看到,每一行都会对应输出一次文件名,那是你使用 FILENAME 内置变量时 awk 默认的行为。

我们可以使用 NR 来统计一个输入文件的行数(记录),谨记,它也会计算空行,正如我们将要在下面的例子中看到的那样。

当我们使用 cat 命令查看文件 domains.txt 时,会发现它有 14 行文本和 2 个空行:

$ cat ~/domains.txt

awk 系列Part10:如何使用 awk 内置变量

输出文件内容

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

awk 系列Part10:如何使用 awk 内置变量

awk 统计行数

想要统计一条记录或一行中的字段数,我们可以像下面那样使用 NR 内置变量:

$ cat ~/names.txt

awk 系列Part10:如何使用 awk 内置变量

列出文件内容

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

awk 系列Part10:如何使用 awk 内置变量

awk 统计文件中的字段数

接下来,你也可以使用 FS 内置变量指定一个输入文件分隔符,它会定义 awk 如何将输入行划分成字段。

FS 默认值为“空格”和“制表符”,但我们也能将 FS 值修改为任何字符来让 awk 根据情况切分输入行。

有两种方法可以达到目的:

  • 第一种方法是使用 FS 内置变量
  • 第二种方法是使用 awk 的 -F 选项

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

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

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

awk 系列Part10:如何使用 awk 内置变量

awk 过滤密码文件中的各字段

此外,我们也可以利用 FS 内置变量,如下:

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

awk 系列Part10:如何使用 awk 内置变量

使用 awk 过滤文件中的各字段

使用 OFS 内置变量来指定一个用于输出的字段分隔符,它会定义如何使用指定的字符分隔输出字段,示例如下:

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

awk 系列Part10:如何使用 awk 内置变量

向文件中的字段添加分隔符

在本节中,我们已经学习了使用含有预定义值的 awk 内置变量的理念。但我们也能够修改这些值,虽然并不推荐这样做,除非你明白自己在做什么,并且充分理解(这些变量值)。

此后,我们将继续学习如何在 awk 命令操作中使用 shell 变量,所以,请继续关注我们。


via: http://www.tecmint.com/awk-built-in-variables-examples/

作者:Aaron Kili
译者:ChrisLeeGit
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

转载于:https://blog.51cto.com/wutengfei/2402068

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106797.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux常用的环境变量_linux用户的环境变量

    linux常用的环境变量_linux用户的环境变量环境变量配置文件如想将一个路径加入到$PATH中,可以像下面这样做:1.控制台中:$PATH=”$PATH:/my_new_path”(关闭shell,会还原PATH)2.修改profile文件:$vi/etc/profile以交叉编译环境为例:交叉编译工具器在/usr/local/arm/4.3.2/bin/找到下面内容if[“$EUID”=”0”];thenpa…

  • 新手入侵笔记_探灵笔记适合新手的角色

    新手入侵笔记_探灵笔记适合新手的角色【拿shell】 1.直接上传aspasajspcerphpaspxhtrcdx格式的木马,不行就利用IIS6.0解析漏洞”:1.asp;1.jpg/1.asp;.jpg/1.asp;jpg/1.asp;.xls 2.上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。 3.上传图片木马把地址复制到…

  • android倒计时功能的实现(CountDownTimer)[通俗易懂]

    android倒计时功能的实现(CountDownTimer)[通俗易懂]在逛论坛的时候,看到一个网友提问,说到了CountDownTimer这个类,从名字上面大家就可以看出来,记录下载时间。将后台线程的创建和Handler队列封装成一个方便的类调用。    查看了一下官方文档,这个类及其简单,只有四个方法,上面都涉及到了onTick,onFinsh、cancel和start。其中前面两个是抽象方法,所以要重写一下。         下面是官方给的一个小例子:ne

  • Unity | Cinemachine ClearShot Camera[通俗易懂]

    Unity | Cinemachine ClearShot Camera[通俗易懂]ClearShotCamera可以管理一组子虚拟相机,这些虚拟相机需要具有CinemachineCollider组件,ClearShotCamera可以实现角色被障碍物挡住时,虚拟摄像机的自动切换效果,如下所示,角色与Cam2被BoxCollider挡住时,虚拟相机由Cam2自动切换到Cam3。ClearShotCamera上有一个CinemachineClearShot组件,VirtualCameraChildren管理虚拟相机。CinemachineCollider既可以挂在所

  • 对象转json字符串字段丢失_excel某个对象程序库丢失

    对象转json字符串字段丢失_excel某个对象程序库丢失 在fastjson下将对象转json时会丢失部分属性的情况,出现这种情况的问题原因是由于属性命名不符合规范导致,比如:uId,一个字母后面紧跟着一个大写字母,导致反射get/set方法时会出现连续两个大写字母(getUId/setUId)。解决该问题的方法时在属性上加上注解:@JSONField(name="uId"),就可以解决该问题。或者是属性名serviceDeadline在get/…

  • 二分查找法

    序言引在正式的聊二分法之前,我们先来看一下下面的小例子:l.index(66)…我们之所以用index方法可以找到,是因为python帮我们实现了查找方法。如果,index方法不给你用了。。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号