AWK使用总结3

243 阅读2分钟

引言

  • 本文主要介绍AWK中Record & Field定义以及部分内置函数(NF,FS,RS,NR,FNR)的介绍,仅供参考。

Record & Field

  • 前面提到过Awk将一个文本文件视为一个文本数据库,因此它也有记录(Record)和字段(Field)的概念,这个可以类比结构性数据库mysql的表,每一行是一条记录,而每一行由多列组成,每一列表示字段,AWK文件也是默认回车符为两条记录的分界线,字段之间默认是空白符。
  • 内置变量NF:记录字段的个数(统计列的个数)
awk '{print "字段数:" NF}' a.txt

  • 该内置变量还有一个用法就是$NF,同前面的$1同样的用法,只是表示的是最后一个字段
awk '{print "最后一列:"$NF}' a.txt

  • 同理$(NF -a)表示倒数第二个
awk '{print "倒数第二列:"$(NF-1)}' a.txt

  • 内置变量FS:用于更改字段分隔符(默认分隔符是空格),来进行格式化输入
    • 因为测试文件b.txt是以,分隔,默认是空白所以取$1会拿到全部结果
    • FS是内置变量,-F ere是一个设置FS参数的选项,属于包含关系
# 默认空格的情况
awk '{print $1}' a.txt
# 更改分隔符
awk 'BEGIN{FS=","}{print $1}' b.txtv

  • 内置变量```RS````:用于更改记录之间的分隔符(默认是换行符),上面filed的是FS,这个是Row是RS
    • RS如果更改成空,那它会将连续不为空行的所有行(一个段落)当作一个记录,而且强制回车为字段分隔符
awk 'BEGIN{RS=","}{print}' b.txt
awk 'BEGIN {RS="";FS=":"} {print "First line: " $1}' c.txt

  • 内置变量NR:读取文件的行数(在某些应用场景中可以当作行号来使用)
awk '{print "行号为:" NR}' a.txt

  • 内置变量FNR:也是读取文件的行数,但是和NR 不同的是当读取的文件有两个或两个以上时,NR 读取完一个文件,行数继续增加 而FNR 重新从1开始记录
awk '{print "NR:" NR "FNR:" FNR}' a.txt b.txt

  • 其他经常使用的内置变量主要是控制输出的,下一篇介绍。