linux常用命令 / shell 及相关 / 未分类 · 2014年2月19日

awk中的NR和FNR的区别

2014 update
evan@evan-laptop:~/test/test0$ ls -l
总用量 12
-rw-rw-r– 1 evan evan 6 2月 18 18:06 1
-rw-rw-r– 1 evan evan 2 2月 19 10:19 2
-rw-rw-r– 1 evan evan 2 2月 19 10:27 test
evan@evan-laptop:~/test/test0$ ls -l |awk ‘NR>1{print $NF}’
1
2
test
evan@evan-laptop:~/test/test0$ ls -l |awk ‘NR>0{print $NF}’
12
1
2
test
evan@evan-laptop:~/test/test0$ ls -l|awk ‘NR>1{print “echo > ” $NF }’
echo > 1
echo > 2
echo > test
名词解释
 NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。
  在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
  NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
容易混淆的两个变量:NF和$NF两个变量
NF是处理行中域的个数
$NF 是输出处理行中最后一个域的内容
$1 处理行中第一个域的内容 ,依此类推
http://www.letuknowit.com/topics/20120329/sample-about-awk-build-in-variable-nr-fnr-nf.html/
http://blog.csdn.net/hittata/article/details/7580422
*********************************
awk中的NR和FNR的区别
evan@evan-laptop:~/test/tmp$ cat 1
ln 11
ln 12
evan@evan-laptop:~/test/tmp$ cat 2
ln 21
ln 22
evan@evan-laptop:~/test/tmp$ awk '{print NR;print FNR;print $0;}' 1
1 #NR
1 #FNR
ln 11
2
2
ln 12
evan@evan-laptop:~/test/tmp$ awk '{print NR;print FNR;print $0;}' 1 2
1
1
ln 11
2
2
ln 12
3
1
ln 21
4
2
ln 22
新打开文件时FNR会重新从1开始,这东西 就像 open 那家伙一样
http://blog.51yip.com/shell/1041.html