Linux基础教程 linux awk内置变量使用介绍

  awk是个优秀文本处理工具,可以说是一门程序设计语言。下面是兄弟连Linux培训

给大家介绍的awk内置变量。

  一、内置变量表

  属性 说明

  $0 当前记录(作为单个变量)

  $1~$n 当前记录的第n个字段,字段间由FS分隔

  FS 输入字段分隔符 默认是空格

  NF 当前记录中的字段个数,就是有多少列

  NR 已经读出的记录数,就是行号,从1开始

  RS 输入的记录他隔符默 认为换行符

  OFS 输出字段分隔符 默认也是空格

  ORS 输出的记录分隔符,默认为换行符

  ARGC 命令行参数个数

  ARGV 命令行参数数组

  FILENAME 当前输入文件的名字

  IGNORECASE 如果为真,则进行忽略大小写的匹配

  ARGIND 当前被处理文件的ARGV标志符

  CONVFMT 数字转换格式 %.6g

  ENVIRON UNIX环境变量

  ERRNO UNIX系统错误消息

  FIELDWIDTHS 输入字段宽度的空白分隔字符串

  FNR 当前记录数

  OFMT 数字的输出格式 %.6g

  RSTART 被匹配函数匹配的字符串首

  RLENGTH 被匹配函数匹配的字符串长度

  SUBSEP \034

  2、实例

  1、常用操作

  [[email protected] ~]$ awk‘/^root/{print $0}‘ /etc/passwd

  root:x:0:0:root:/root:/bin/bash

  /^root/ 为选择表达式,$0代表是逐行

  2、设置字段分隔符号(FS使用方法)

  [[email protected] ~]$ awk‘BEGIN{FS=":"}/^root/{print $1,$NF}‘ /etc/passwd

  root /bin/bash

  FS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。

  3、记录条数(NR,FNR使用方法)

  [[email protected] ~]$ awk ‘BEGIN{FS=":"}{printNR,$1,$NF}‘ /etc/passwd

  1 root /bin/bash

  2 bin /sbin/nologin

  3 daemon /sbin/nologin

  4 adm /sbin/nologin

  5 lp /sbin/nologin

  6 sync /bin/sync

  7 shutdown /sbin/shutdown

  ……

  NR得到当前记录所在行

  4、设置输出字段分隔符(OFS使用方法)

  [[email protected] ~]$ awk‘BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}‘/etc/passwd

  1^^root^^/bin/bash

  OFS设置默认字段分隔符

  5、设置输出行记录分隔符(ORS使用方法)

  [[email protected] ~]$ awk‘BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}‘ /etc/passwd

  1 root /bin/bash^^2 bin/sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin

  从上面看,ORS默认是换行符,这里修改为:”^^”,所有行之间用”^^”分隔了。

  6、输入参数获取(ARGC ,ARGV使用)

  [[email protected] ~]$ awk‘BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {printk"="ARGV[k]; }}‘ /etc/passwd

  ARGC=2

  0=awk

  1=/etc/passwd

  ARGC得到所有输入参数个数,ARGV获得输入参数内容,是一个数组。

  7、获得传入的文件名(FILENAME使用)

  [[email protected] ~]$ awk‘BEGIN{FS=":";print FILENAME}{print FILENAME}‘ /etc/passwd

  /etc/passwd

  FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量。

  8、获得linux环境变量(ENVIRON使用)

  [[email protected] ~]$ awk‘BEGIN{print ENVIRON["PATH"];}‘ /etc/passwd

  /usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin:/usr/local/mysql/bin:/home/web97/bin

  ENVIRON是子典型数组,可以通过对应键值获得它的值。

  9、输出数据格式设置:(OFMT使用)

  [[email protected] ~]$ awk‘BEGIN{OFMT="%.3f";print 2/3,123.11111111;}‘ /etc/passwd

  0.667 123.111

  OFMT默认输出格式是:%.6g 保留六位小数,这里修改OFMT会修改默认数据输出格式。

  10、按宽度指定分隔符(FIELDWIDTHS使用)

  [[email protected] ~]$ echo20100117054932 | awk ‘BEGIN{FIELDWIDTHS="4 2 2 2 2 3"}{print$1"-"$2"-"$3,$4":"$5":"$6}‘

  FIELDWIDTHS其格式为空格分隔的一串数字,用以对记录进行域的分隔,FIELDWIDTHS="4 2 2 2 2 2"就表示$1宽度是4,$2是2,$3是2 .... 。这个时候会忽略:FS分隔符。

  11、RSTARTRLENGTH使用

  [[email protected] ~]$ awk‘BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART,RLENGTH }‘

  11 11 4

  [[email protected] ~]$ awk‘BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART,RLENGTH }‘

  0 0 –1

  RSTART 被匹配正则表达式首位置,RLENGTH 匹配字符长度,没有找到为-1.

时间: 2024-10-05 04:28:17

Linux基础教程 linux awk内置变量使用介绍的相关文章

shell文本过滤编程(四):awk内置变量及一般变量

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] awk有许多内置变量用来设置环境信息.这些变量可以被改变.下面是awk内置变量: ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME  a w k浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 - F选项 NF 浏览记录的域个数 NR 已读的记录数 OFS 输出域分隔符

linux awk 内置函数详细介绍(实例)

这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x ) 返回 y/x 的反正切. cos( x ) 返回 x 的余弦:x 是弧度. sin( x ) 返回 x 的正弦:x 是弧度. exp( x ) 返回 x 幂函数. log( x ) 返回 x 的自然对数. sqrt( x ) 返回 x 平方根. int( x ) 返回 x 的截断至整数的

awk内置变量 awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 此外,$0变量是指整条记录.$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推. 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行

Linux基础教程 linux下使用find命令根据系统时间查找文件用法

  LinuxFind 兄弟连Linux培训 总结这些时间戳包括 复制代码代码如下: mtime 文件内容上次修改时间 atime 文件被读取或访问的时间 ctime 文件状态变化时间 mtime 和 atime 的含义都是很容易理解的,而 ctime 则需要更多的解释.由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则inode 数据也将变化.这可能是由一系列操作引起的,包括创建到文件的符号链接.更改文件权限或移动了文件等.由于在这些情况下,文件内容不会被读取

Linux基础教程 linux中使用find命令搜索文件常用方法记录

find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方法. 1.命令格式 find 搜索路径 搜索表达式 搜索路径:这个比较容易理解,就是指定的搜索目录,比如/etc.搜索路径也可以同时指定多个,用空格分开就可以了,如/etc /home. 搜索表达式:find命令关键就是在表达式上,表达式的选项非常多.以下命令测试主要根据表达式的选项来划分. 2.命

Linux基础教程 linux无密码ssh登录设置

  概述 在一些常用设备之间ssh, scp,不用输入密码可以节省不少时间. 生成密钥 先看本地是否有密钥,如果有,则不用生成,否则会影响到以前打通的设备. 复制代码代码如下:(兄弟连Linux培训www.lampbrother.net) ls ~/.ssh/id_rsa.pub 没有则用 ssh-key-gen 在本地主机上创建公钥和密钥 复制代码代码如下: ssh-keygen -t rsa 一路回车 把公钥复制到远程主机上 复制代码代码如下: ssh-copy-id -i~/.ssh/id

Linux基础教程 linux下查询history操作时间的方法

要在linux操作系统中查看history记录的操作时间,可以按如下步骤实现: 学习linux 1,修改/etc/profile文件,在末尾添加:exporthisttimeformat="%f %t `whoami` " 2,或在用户目录下,修改文件 .bash_profile,添加export histtimeformat="%f%t `whoami` " 退出终端,重新登录. 例,查看history操作时间: 复制代码代码如下: [[email protect

Linux基础教程 linux系统中的批量删除文件与空文件删除的命令介绍

linux下面删除文件或者目录命令rm(remove): 兄弟连Linux培训 功能说明:删除文件或目录. 语 法:rm[-dfirv][--help][--version][文件或目录...] 补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件. 参 数: -d或--directory直接把欲删除的目录的硬连接数据删成0,删除该目录. -f或--force强制删除文件或目录. -i或--interactive删除既有文件或目录之前先询问用户

awk内置变量的应用

现在我们来看一些例子,它们以变量NR开头.将前面计算平均成绩的脚本中的print语句修改为: $ cat grades john 85 92 78 94 88 andrea 89 90 75 90 86 jasper 84 88 80 92 84 $ cat grades.awk #求5个成绩的平均值 { total = $2 + $3 + $4 + $5 + $6 avg = total / 5 print NR ".", $1 , avg } 运行修改过的脚本输出如下结果: $ a