awk脚本基本结构

awk 'BEGIN{ print "start" }pattern{ commands }END{ print "end" }' file

一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如:

awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename

awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

awk的工作原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:执行BEGIN{ commands }语句块中的语句;

第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

第三步:当读至输入流末尾时,执行END{ commands }语句块。

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

示例

echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'

Start

A line 1

A line 2

End

当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'

v1 v2 v3

双引号拼接使用:

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'

v1=v2=v3

{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。

awk内置变量(预定义变量)

说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。

$0 这个变量包含执行过程中当前行的文本内容。

[N] ARGC 命令行参数的数目。

[G] ARGIND 命令行中当前文件的位置(从0开始算)。

[N] ARGV 包含命令行参数的数组。

[G] CONVFMT 数字转换格式(默认值为%.6g)。

[P] ENVIRON 环境变量关联数组。

[N] ERRNO 最后一个系统错误的描述。

[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。

[A] FILENAME 当前输入文件的名。

[P] FNR 同NR,但相对于当前文件。

[A] FS 字段分隔符(默认是任何空格)。

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

[A] NF 表示字段数,在执行过程中对应于当前的字段数。

[A] NR 表示记录数,在执行过程中对应于当前的行号。

[A] OFMT 数字的输出格式(默认值是%.6g)。

[A] OFS 输出字段分隔符(默认值是一个空格)。

[A] ORS 输出记录分隔符(默认值是一个换行符)。

[A] RS 记录分隔符(默认是一个换行符)。

[N] RSTART 由match函数所匹配的字符串的第一个位置。

[N] RLENGTH 由match函数所匹配的字符串的长度。

[N] SUBSEP 数组下标分隔符(默认值是34)。

1、打印文件的第一列(域):

awk '{print $1}' filename

2、打印文件的前两列(域):

awk '{print $1,$2}' filename

3、打印完第一列,然后打印第二列:

awk '{print $1 $2}' filename

4、打印文本文件的总行数:

awk 'END{print NR}' filename

5、打印文本第一行:

awk 'NR==1{print}' filename

6、打印文本第二行第一列:

sed -n "2, 1p" filename | awk 'print $1'

7、打印文件的最后一行

awk 'END{print}'  或 tail -1 file

shell里面的赋值方法有两种,格式为

1) arg=`(命令)`

2) arg=$(命令)

因此,如果想要把某一文件的总行数赋值给变量nlines,可以表达为:

1) nlines=`(awk 'END{print NR}' filename)`

或者

2) nlines=$(awk 'END{print NR}' filename)

awk取文本列_awk命令结构/内置变量/获取文本某行或某列相关推荐

  1. 【Shell】awk命令--输出某列,列求和,列求平均值,列最大值,列去重复,取倒列,过滤行,匹配,不匹配,内置变量|定义分隔符|多个分隔符...

    目录 awk基本语法 awk输出某几列 awk遍历文件行处理 awk中运行shell命令 方法1:awk 内置函数system 方法2 通过awk  print 交给bash awk中运行shell命 ...

  2. 【Shell】awk命令--输出某列,列求和,列求平均值,列最大值,列去重复,取倒列,过滤行,匹配,不匹配,内置变量|定义分隔符|多个分隔符

    目录 awk基本语法 awk输出某几列 awk遍历文件行处理 awk中运行shell命令 方法1:awk 内置函数system 方法2 通过awk  print 交给bash awk中运行shell命 ...

  3. 命令 —— awk内置变量(NF,NR,FS,FILENAME)

    关于awk命令的几个内置变量(NF,NR,FS,FILENAME) 1.NF:支持记录域个数,在记录被读之后再设置例1 [root@redhat wilsontest]# pwd /tmp/wilso ...

  4. awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  5. 文件自定义变量_awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  6. linux awk 内置变量使用介绍

    awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...

  7. linux内置变量大全,(转)linux awk 内置变量使用介绍

    awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入 ...

  8. linux awk 内置变量实例

    awk 是一门非常优秀的文本处理工具,甚至可以上升作为一门程序设计语言. 它处理文本的速度是快得惊人的,现在很多基于shell 日志分析工具都可以用它完成.特点是设计简单,速度表现很好,本文将介绍aw ...

  9. 查看命令为内置命令还是外部命令

    查看命令为内置命令还是外部命令---type        有木有 ? 有的用户在用一般用户身份执行ifconfig eth0  会出现"-bash: ifconfig :command n ...

最新文章

  1. DDos攻击的一些领域知识——(流量模型针对稳定业务比较有效)不稳定业务采用流量成本的检测算法,攻击发生的时候网络中各个协议的占比发生了明显的变化...
  2. JavaScript的特殊函数
  3. Linux解压有思路
  4. 达策— 毕盛财务分析系统
  5. Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型
  6. 使用URLRewriter实现URL重写
  7. 在Windows上搭建Go开发环境
  8. C++11 decltype
  9. JavaScript:判断两个日期之间的差距天数
  10. JS AES加密与PHP解密
  11. zookeeper基本安装文档
  12. foxmail连接163邮箱服务器,win10系统下foxmail绑定或添加163邮箱的方法
  13. 屌炸天的SpringBoot2 +WxJava 整合微信
  14. 软工作业 4:结对项目之词频统计——基本功能
  15. 红米手机2进入开发者模式的方法
  16. deeptools | bam to BigWig, 并使用IGV可视化峰图差异
  17. TORCHVISION 目标检测微调教程
  18. 线程池监控和动态配置
  19. 【linux】嵌入式linux的组成
  20. 【Qt象棋游戏】03_象棋棋子摆放

热门文章

  1. OpenJDK将对Android开发产生怎样的影响?
  2. java初学者必看——J2SE小结
  3. Oracle并行进程小结
  4. Samba的主配置文件
  5. cocos2d-x自制工具03:AnimatePacker for Mac/Win32 v1.1 Build1发布!
  6. android 虚拟机快捷键中英列表
  7. union all与空字段的一种用法
  8. 面向对象的本质是算法的上下文封装,是同一类属的行为接口的一致性
  9. 22.6. Query 查询
  10. hdu 1046 完数