关于awk中NR、FNR、NF、$NF、FS、OFS的说明
一、NR和FNR
1.释义
NR: 表示当前读取的行数
FNR:当前修改了多少行
2.举例
比如现在AWK处理到第五行。第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4
NR==FNR 表示从起始行到当前行,awk都进行了操作,比如修改,添加等等 ;
二、NF和$NF
1.释义
NF:浏览记录的域的个数
$NF: 最后一个列,输出最后一个列的内容
2.举例
[root@vshi-template shell]# pwd
/root/guanyy/scripts/shell
[root@vshi-template shell]# echo $PWD|awk -F/ '{print $NF}'
shell
[root@vshi-template shell]# echo $PWD|awk -F/ '{print NF}'
5
三、FS和OFS
1.释义
FS:指定列分隔符,当FS为空的时候,awk会把一行中的每个字符,当成一列来处理。
OFS:列输出分隔符
2.举例
(1)FS指定列分隔符
- [zhangy@localhost test]$ echo "111|222|333"|awk '{print $1}'
- 111|222|333
- [zhangy@localhost test]$ echo "111|222|333"|awk 'BEGIN{FS="|"}{print $1}'
- 111
(2)FS也可以使用正则
- [zhangy@localhost test]$ echo "111||222|333"|awk 'BEGIN{FS="[|]+"}{print $1}'
- 111
(3)FS为空时
- [zhangy@localhost test]$ echo "111|222|333"|awk 'BEGIN{FS=""}{NF++;print $0}'
- 1 1 1 | 2 2 2 | 3 3 3
(4)RS被设定成非\n时,\n会成FS分割符中的一个
- [zhangy@localhost test]$ cat test1
- 111 222
- 333 444
- 555 666
- [zhangy@localhost test]$ awk 'BEGIN{RS="444";}{print $2,$3}' test1
- 222 333
- 666
(5)OFS列输出分隔符
- [zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $1,$2}' test1
- 111|222
- 333|444
- 555|666
- [zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $1 OFS $2}' test1
- 111|222
- 333|444
- 555|666
test1只有二列,如果100列,都写出来太麻烦了吧。
- [zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $0}' test1
- 111 222
- 333 444
- 555 666
- [zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{NF=NF;print $0}' test1
- 111|222
- 333|444
- 555|666
为什么第二种方法中的OFS生效呢?个人觉得,awk觉查到列有所变化时,就会让OFS生效,没变化直接输出了。
参考:http://blog.51yip.com/shell/1151.html
关于awk中NR、FNR、NF、$NF、FS、OFS的说明的更多相关文章
- awk之NR==FNR问题
NR,表示awk开始执行程序后所读取的数据行数. FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计. 下面看两个例子: 1,对于单个文件NR 和FNR 的 输出结果一样的 ...
- awk中NF,NR的含义
awk中NF和NR的意义,其实你已经知道NF和NR的意义了,NF代表的是一个文本文件中一行(一条记录)中的字段个数,NR代表的是这个文本文件的行数(记录数).在编程时特别是在数据处理时经常用到.建议你 ...
- awk中的NR FNR
shell编程中,awk简直就是一把利器,你能够把它看成shell的一部分,也能够看成一种单独的语言,功能十分强大.今天先来说一说NR与FNR 先准备两个文件: 1.txt,内容为: user pas ...
- awk中NF的使用
统计机器中网络连接各个状态个数 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 一下子不明白$NF是什么意 ...
- awk 中 FS的用法
在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {pr ...
- awk 中 RS,ORS,FS,OFS 区别与联系
一,RS与ORS 1,RS是记录分隔符,默认的分隔符是\n,具体用法看下 [root@krlcgcms01 mytest]# cat test1 //测试文件 111 222 333 444 ...
- 转 awk中RS,ORS,FS,OFS区别与联系
今天用到awk ofs 看到一篇不错文章 awk中RS,ORS,FS,OFS区别与联系 张映 发表于 2010-12-02 分类目录: shell 标签:awk, FS, OFS, ORS, RS, ...
- Linux中awk后面的RS, ORS, FS, OFS 用法
Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义“行”呢?这就是RS的作用. 默认情况下,RS的 ...
- Linux中awk后面的RS, ORS, FS, OFS 含义
转载自http://blog.csdn.net/qq416647781/article/details/40649419 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的 ...
随机推荐
- 535 Encode and Decode TinyURL 编码和解码精简URL地址
详见:https://leetcode.com/problems/encode-and-decode-tinyurl/description/ C++: class Solution { public ...
- odoo filter 日期
<!--日期--> <filter name="before_twodays" string="前天" domain="[('dat ...
- Spark Mllib里如何将数值特征字段用StandardScaler进行标准化(图文详解)
不多说,直接上干货! 首先,要明白为什么有时候,数值特征字段需要进行标准化? 答:因为,当我们若用回归分析算法时,必须将数值特征字段进行标准化,这是因为数值特征字段单位不同,数字差异很大,所以无法彼此 ...
- QQ免费企业邮箱申请配置
对于小企业来说,免费的企业邮箱是不错的选择,省去服务器费用和人员维护费用.在这里说一下,qq的免费企业邮箱.如果想搭建自己的企业邮局,请参考:centos extmail postfix nginx ...
- Linux防火墙iptables配置开放某个端口
开放某个端口 查看防火墙规则命令: iptables -L -n 添加端口 1.编辑iptables文件 vim /etc/sysconfig/iptables 2.添加开放端口配置 -A INPUT ...
- na 残
题目描述: 对于斐波那锲数列f(0)=0,f(1)=1,....求f(f(n)的值 0<=n<=10^100 给出T组数据,每行一个n 输出n行 f(f(n)) 样例输入: 4 0 1 2 ...
- 断言assert用法
本文转自:http://blog.jobbole.com/76285/ 这个问题是如何在一些场景下使用断言表达式,通常会有人误用它,所以我决定写一篇文章来说明何时使用断言,什么时候不用. 为那些还不清 ...
- arcgis jsapi接口入门系列(4):用代码在地图画点线面
PS:用代码画点这样写是为了跟后面的用鼠标画点线面区分出来 画点 drawPointGraphic: function () { //点有多种样式:一般的点,显示文字,显示图片 //一般的点 let ...
- KMP字符串模式匹配详解
KMP字符串模式匹配详解 http://www.cppblog.com/oosky/archive/2006/07/06/9486.html
- Objective-C Numbers
In Objective-C programming language, in order to save the basic data types like int, float, bool in ...