1、NF:number of fileds(字段/域的个数)整数

$NF:取最后一列的字符串,等同于$1、$2,… $(NF-1), $NF等等

来看个例子吧

kdvmt@kdvmt:temp$ ls *.sh -al
-rwxr-xr-x 1 kdvmt kdvmt 72 2021-07-12 16:27 fileexist.sh
kdvmt@kdvmt:temp$ ls *.sh -al | awk -F ' ' '{print NF}'
8
kdvmt@kdvmt:temp$ ls *.sh -al | awk -F ' ' '{print $NF}'
fileexist.sh
kdvmt@kdvmt:temp$ ls *.sh -al | awk '{print NF}'
8
kdvmt@kdvmt:temp$ ls *.sh -al | awk '{print $NF}'
fileexist.sh

第一句是想列出后缀是sh的文件的详情,正好只有一个文件是fileexist.sh
第二句是想筛选出总共有几列,是8列,awk -F 指定分隔符,这里是空格(默认是空格/Tab)
第三句是想打印最后一列的内容,其实就是文件名

当然也可以把最后一个的NF换成具体的值,这样就是想打印具体的第几列了

kdvmt@kdvmt:temp$ ls *.sh -al | awk -F ' ' '{print $3}'
kdvmt
kdvmt@kdvmt:temp$ ls *.sh -al | awk -F ' ' '{print $6}'
2021-07-12
kdvmt@kdvmt:temp$ ls -al *.sh | awk '{print $1,$2}'
-rwxr-xr-x 1
kdvmt@kdvmt:temp$ ls -al *.sh | awk '{print $1 $2}'
-rwxr-xr-x1

2、FS:输入字符列分隔符 filed seperator (FS变量的值)默认空格
当FS为空的时候,awk会把一行中的每个字符,当成一列来处理
OFS:输出列分隔符

kdvmt@kdvmt:temp$ cat /etc/passwd | awk 'BEGIN{FS=":"} {print $1,$NF}' | head -n 5
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
sync /bin/sync

上面指定输入分隔符是":"
下面指定输出分隔符是"***"

kdvmt@kdvmt:temp$ cat /etc/passwd | awk 'BEGIN{FS=":";OFS="***"} {print $1,$NF}' | head -n 5
root***/bin/bash
daemon***/bin/sh
bin***/bin/sh
sys***/bin/sh
sync***/bin/sync

awk是行处理的,也就是说每次处理一行
$0:每一行,就是这一行

kdvmt@kdvmt:temp$ cat 1.txt
hello world
good idea
black cat
kdvmt@kdvmt:temp$ cat 1.txt | awk '{OFS=":"} {print $1,$2}'
hello:world
good:idea
black:cat
kdvmt@kdvmt:temp$ cat 1.txt | awk '{OFS=":"} {print NF,$1}'
2:hello
2:good
2:black
kdvmt@kdvmt:temp$ cat 1.txt | awk '{OFS=":"} {print $0,$NF}'
hello world:world
good idea:idea
black cat:cat

3、RS:Record Separator,记录行分隔符,每行记录都是以“\n”为一个(换行的)标志
ORS:OutPut Record Separator 输出当前记录分隔符

kdvmt@kdvmt:temp$ awk 'BEGIN {OFS=":";ORS="#\n"} {print $1,$0}' 1.txt
hello:hello world#
good:good idea#
black:black cat#
kdvmt@kdvmt:temp$ cat 2.txt
hello*world*morning
kdvmt@kdvmt:temp$ cat 2.txt | awk 'BEGIN {RS="*"} {print $0}'
hello
world
morning

4、NR:number of record 记录的数目,表示当前读取的行数
从1开始,新的文件延续上面的计数,新文件不从1开始
FNR:读取文件的记录数(行号),从1开始,新的文件重新从1开始计数

kdvmt@kdvmt:temp$ cat 3.txt | awk '{print "line num: " NR}'
line num: 1
line num: 2
line num: 3

解析:当读取第一个文件的A的时候NR 和 FNR 都是从1开始计数,这时NR==FNR 将行全部内容赋值给数组,当读取到第二个文件时,NR!=FNR此时表示已读取到第二个文件

kdvmt@kdvmt:temp$ cat 1.txt
hello world
good idea
black cat
kdvmt@kdvmt:temp$ cat 3.txt
hello world
good morning
up down
kdvmt@kdvmt:temp$ awk '{print "NR = " NR, "FNR = " FNR}' 1.txt 3.txt
NR = 1 FNR = 1
NR = 2 FNR = 2
NR = 3 FNR = 3
NR = 4 FNR = 1
NR = 5 FNR = 2
NR = 6 FNR = 3

Shell脚本-NF、FS(OFS)、RS(ORS)、NR(FNR)相关推荐

  1. FS\OFS\RS\ORS的使用

    在linux 中,总是会忘记FS\OFS\RS\ORS的使用 下面一张图非常明晰的显示

  2. [Shell] awk FS,OFS,RS,ORS

    FS :是列分隔符,默认是空格 OFS:是输出列的分隔符 RS :是行分隔符,默认是空格 ORS:是输出行的分隔符 [/]# echo "a b c d" | awk '{prin ...

  3. shell脚本编程知识汇总(一)

    原文: http://www.cnblogs.com/ebusi/archive/2011/02/09/1950422.html Shell脚本编程的常识 (这些往往是经常用到,但是各种网络上的材料都 ...

  4. linux shell脚本 编程

    介绍 白树明 敲代码的流川枫 天易IT学院 北京天易博通科技有限公司 执行总裁 12小时视频 https://www.bilibili.com/video/BV1j541157Sr?p=1 流老师的笔 ...

  5. shell脚本编程大全

    文章目录 一.命令行 二.shell 三.文件系统 四.shell命令 五.shell的父子关系 六.内建命令 七.环境变量 八.文件系统权限 九.管理文件系统 十.构建基本shell脚本 十一.使用 ...

  6. linux awk 区别,linux awk 中 RS,ORS,FS,OFS 区别与联系

    今天在学习时偶尔搜索到了这篇文章,觉得不错,转摘一下:http://blog.51yip.com/shell/1151.html 总结 RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1, ...

  7. awk中RS,ORS,FS,OFS区别与联系

    学习awk时,一定要记得动手去实践,只有在实践中才能发现问题,以下就我在学习中和实践中的经验,总结一下RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1,RS是记录分隔符,默认的分隔符是\ ...

  8. awk RS,ORS RT,FS,OFS 含义

    变量 说明 $0 表示整个当前行 $1 ~ $n 当前记录的第N个字段 FS 输入字段分隔符(-F相同作用)默认空格 RS 输入记录分割符,默认换行符(即文本是按一行一行输入) RT 代指分隔符,当R ...

  9. linux awk 中 RS,ORS,FS,OFS 区别与联系

    今天在学习时偶尔搜索到了这篇文章,觉得不错,转摘一下:http://blog.51yip.com/shell/1151.html 总结 RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1, ...

最新文章

  1. slot没有毁灭的问题_解析flink之perjob模式下yn参数不生效问题
  2. 电商618背后的那些技术事儿
  3. 如何在Python中附加文件?
  4. Tensorflow搞一个聊天机器人
  5. python中的垃圾回收机制_python里面的垃圾回收机制
  6. 双十一来了,揭秘菜鸟物流背后的那些算法黑科技
  7. Mysql8秒级加字段_Mysql8.0秒级加字段
  8. Scrapy 简介及初探
  9. Nginx 安装与使用
  10. 在Ruby on Rails中对nil v。空v。空白的简要解释
  11. 最短路问题(Bellman/Dijkstra/Floyd)
  12. “我被苹果人脸识别系统「坑」进了监狱”
  13. java info()方法_Java中的提供者getInfo()方法
  14. KOD: Linux 命令行安装
  15. 《我爱我的祖国》受捧 再现专线另类舌尖上中国
  16. ORACLE中的INTERVAL
  17. ios开发的p12和provision
  18. 【转载】任正非:鼓足干劲,力争上游,不畏一切艰难困苦
  19. 产品原型设计:使用axure实现菜单下拉效果
  20. matlab 图片的读入和显示(imread函数和figure函数)

热门文章

  1. 如何实现一个sandbox?
  2. 深圳一普通中学老师工资单曝光,秒杀程序员,网友:酸了酸了
  3. DataTable常用数据筛选方法
  4. 种草软文怎么写?分享一些超实用的种草软文写作技巧。
  5. 关于抽烟、戒烟、或者说是收放自如
  6. MacW小编分享设计师们常用Sketch插件合集,让你效率翻倍!
  7. 【直流潮流】基于直流潮流的电力系统停电分布及自组织临界性分析
  8. amd显卡测试大风车软件md,知之实验室 篇三:大家好才是真的好!免费显卡升级工具AMD FSR技术研究测试...
  9. SAP 打开总账科目
  10. 计算机专业该如何找实习工作?迷茫、不知所措的你值得一看~