1. shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
  2.  
  3. awk是一个文本处理工具,通常用于处理数据并生成结果报告
  4. awk的命名是它的创始人 Alfred AhoPeter WeinbergerBrian Kernighan 姓氏的首个字母组成的
  5.  
  6. awk的工作模式

  7. 语法格式
  8.  
  9. 第一种形式: awk 'BEGIN{}pattern{commands}END{}' file_name
  10.  
  11. BEGIN在匹配之前就执行的操作,pattern{commands}是对每一行的操作,END是匹配完后的操作
  12.  
  13. 第二种形式: standard output | awk 'BEGIN{}pattern{commands}END{}'
  14.  
  15. 语法格式说明

  16. 语法格式     说明
  17. BEGIN{} 正式处理数据之前执行
  18. pattern 匹配模式
  19. {commands} 处理命令,可能多行
  20. END{} 处理完所有匹配数据后执行
  21.  
  22. awk的内置变量
  23.  
  24. 内置变量对照表(上)
  25.  
  26. 内置变量 含义
  27. $ 整行内容
  28. $-$n 当前行的第1-n个字段
  29. NF 当前行的字段个数,也就是多少列
  30. NR 当前的行号,从1开始计数
  31. FNR 多文件处理时,每个文件行号单独计数,都是从0开始
  32. FS 输入字段分隔符。不指定默认以空格或tab键分割
  33. RS 输入行分隔符。默认回车换行
  34. OFS 输出字段分隔符。默认为空格
  35. ORS 输出行分隔符。默认为回车换行

  36. 内置变量对照表(下)
  37.  
  38. 内置变量 含义
  39. FILENAME 当前输入的文件名字
  40. ARGC 命令行参数个数
  41. ARGV 命令行参数数组

  42. 总结:
  43. 内置变量:
  44. $ 打印行所有信息
  45. $~$n 打印行的第1n个字段信息
  46. NF Number Field 处理行的字段个数
  47. NR Number Row 处理行的行号
  48. FNR File Number Row 多文件处理时,每个文件单独记录行号
  49. FS Field Separator 字段分隔符,不指定时默认以空格或tab键分割
  50. RS Row Separator 行分隔符,不指定时以回车换行分割
  51. OFS Output Filed Separator 输出字段分隔符
  52. ORS Output Row Separator 输出行分隔符
  53. FILENAME 处理文件的文件名
  54. ARGC 命令行参数个数
  55. ARGV 命令行参数数组
  56.  
  57. # 输出整行数据
  58.  
  59. [root@localhost shell]# awk '{print $0}' passwd
  60. root:x:::root:/root:/bin/bash
  61. bin:x:::bin:/bin:/sbin/nologin
  62. daemon:x:::daemon:/sbin:/sbin/nologin
  63. adm:x:::adm:/var/adm:/sbin/nologin
  64. lp:x:::lp:/var/spool/lpd:/sbin/nologin
  65. sync:x:::sync:/sbin:/bin/sync
  66. shutdown:x:::shutdown:/sbin:/sbin/shutdown
  67. halt:x:::halt:/sbin:/sbin/halt
  68. mail:x:::mail:/var/spool/mail:/sbin/nologin
  69. operator:x:::operator:/root:/sbin/nologin
  70. games:x:::games:/usr/games:/sbin/nologin
  71. ftp:x:::FTP User:/var/ftp:/sbin/nologin
  72. nobody:x:::Nobody:/:/sbin/nologin
  73. systemd-network:x:::systemd Network Management:/:/sbin/nologin
  74. dbus:x:::System message bus:/:/sbin/nologin
  75. polkitd:x:::User for polkitd:/:/sbin/nologin
  76. sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  77. postfix:x::::/var/spool/postfix:/sbin/nologin
  78. ajie:x:::ajie:/home/ajie:/bin/bash
  79. chrony:x::::/var/lib/chrony:/sbin/nologin
  80. deploy:x::::/home/deploy:/bin/bash
  81. nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
  82.  
  83. # FS指定分隔符
  84. [root@localhost shell]# awk 'BEGIN{FS=":"}{print $1}' passwd
  85. root
  86. bin
  87. daemon
  88. adm
  89. lp
  90. sync
  91. shutdown
  92. halt
  93. mail
  94. operator
  95. games
  96. ftp
  97. nobody
  98. systemd-network
  99. dbus
  100. polkitd
  101. sshd
  102. postfix
  103. ajie
  104. chrony
  105. deploy
  106. nginx
  107.  
  108. # 默认以空格或者tab为分隔符
  109. [root@localhost shell]# cat list
  110. Hadoop Spark Flume
  111. Java Python Scala
  112. Allen Mike Meggie
  113. [root@localhost shell]# awk '{print $1}' list
  114. Hadoop
  115. Java
  116. Allen
  117. [root@localhost shell]# awk 'BEGIN{FS=" "}{print $1}' list
  118. Hadoop
  119. Java
  120. Allen
  121.  
  122. # NF 输出每一行的字段个数
  123. [root@localhost shell]# cat list
  124. Hadoop Spark Flume
  125. Java Python Scala Golang
  126. Allen Mike Meggie
  127. [root@localhost shell]# awk '{print NF}' list
  128.  
  129. # NR 行号,处理多个文件(list,passwd,/etc/fstab)时行号累加
  130. [root@localhost shell]# awk '{print NR}' list passwd /etc/fstab
  131.  
  132. # FNR在处理两个文件以上时会单独计数
  133. [root@localhost shell]# awk '{print FNR}' list passwd /etc/fstab
  134.  
  135. [root@localhost shell]# cat list
  136. Hadoop|Spark:Flume
  137. Java|Python:Scala:Golang
  138. Allen|Mike:Meggie
  139.  
  140. # 以 | 符号分隔列
  141. [root@localhost shell]# awk 'BEGIN{FS="|"}{print $2}' list
  142. Spark:Flume
  143. Python:Scala:Golang
  144. Mike:Meggie
  145. # 以 : 符号分隔列
  146. [root@localhost shell]# awk 'BEGIN{FS=":"}{print $2}' list
  147. Flume
  148. Scala
  149. Meggie
  150.  
  151. # RS 指定行分隔符: --
  152. [root@localhost shell]# cat list
  153. Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
  154. [root@localhost shell]# awk 'BEGIN{RS="--"}{print $0}' list
  155. Hadoop|Spark|Flume
  156. Java|Python|Scala|Golang
  157. Allen|Mike|Meggie
  158.  
  159. [root@localhost shell]# awk 'BEGIN{RS="--";FS="|"}{print $3}' list
  160. Flume
  161. Scala
  162. Meggie
  163.  
  164. # ORS输出分隔符,以&连接各输出行
  165. [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
  166. Flume&Scala&Meggie
  167.  
  168. # 字段默认分隔符是空格
  169. [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}' list
  170. Hadoop Flume&Java Scala&Allen Meggie
  171. &
  172.  
  173. # OFS 指定字段分隔符为 :
  174. [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
  175. Hadoop:Flume&Java:Scala&Allen:Meggie
  176. &
  177.  
  178. # FILENAME 文件名
  179. [root@localhost shell]# awk '{print FILENAME}' list
  180. list
  181.  
  182. # 输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出
  183. [root@localhost shell]# cat list
  184. Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
  185. Test File
  186. Line
  187. [root@localhost shell]# awk '{print FILENAME}' list
  188. list
  189. list
  190. list
  191.  
  192. # ARGC命令行参数个数
  193. [root@localhost shell]# awk '{print ARGC}' list
  194.  
  195. [root@localhost shell]# awk '{print ARGC}' list /etc/fstab
  196.  
  197. # NF表示字段个数,NF= $NF 就是$ 表示最后一个字段
  198. [root@localhost shell]# awk 'BEGIN{FS=":"}{print $NF}' /etc/passwd
  199. /bin/bash
  200. /sbin/nologin
  201. /sbin/nologin
  202. /sbin/nologin
  203. /sbin/nologin
  204. /bin/sync
  205. /sbin/shutdown
  206. /sbin/halt
  207. /sbin/nologin
  208. /sbin/nologin
  209. /sbin/nologin
  210. /sbin/nologin
  211. /sbin/nologin
  212. /sbin/nologin
  213. /sbin/nologin
  214. /sbin/nologin
  215. /sbin/nologin
  216. /sbin/nologin
  217. /bin/bash
  218. /sbin/nologin
  219. /bin/bash
  220. /sbin/nologin

shell编程系列14--文本处理三剑客之awk的概述及常用方法总结的更多相关文章

  1. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  2. shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句

    shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句条件语句 if(条件表达式) 动作1 else if(条件表达式) 动作2 else 动 ...

  3. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  4. shell编程系列19--文本处理三剑客之awk中的字符串函数

    shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...

  5. shell编程系列17--文本处理三剑客之awk动作中的表达式用法

    shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...

  6. shell编程系列16--文本处理三剑客之awk模式匹配的两种方法

    shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...

  7. shell编程系列15--文本处理三剑客之awk格式化输出printf

    shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...

  8. shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容

    shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...

  9. shell编程系列12--文本处理三剑客之sed利用sed修改文件内容

    shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...

随机推荐

  1. Flask-session,WTForms,POOL,Websocket通讯原理 -握手,加密解密过程

    1.Flask-session Flask中的session 需要执行 session_interface - open_session存储到redis中,存的key:session:d3f07db2 ...

  2. go cache

    go 编译, 或是安装库的时候,产生的日志量很大 go env 删除掉这个log.txt文件,系统空间瞬间就够了

  3. 1210 BBS admin后台管理及侧边栏筛选个人站点

    目录 昨日内容 django admin后台管理 使用 建表 用户图片的显示 MEDIA用户配置 查找照片 搭建个人站点 防盗链 新建css文件 侧边栏展示标签 定义分类栏与标签栏 定义时间栏 侧边栏 ...

  4. 《发际线总是和我作队》第九次作业:Beta冲刺Scrum Meeting3

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目冲刺 团队名称 发际线总和我作队 作业学习目标 (1)掌握软件黑盒测试技术:(2)掌握软件 ...

  5. DT二次开发之-采购页面加入好看的倒计时

    加入采购页面倒计时,个人感觉挺漂亮的,做下笔记. <span id="timer" ></span> {if $totime} <script typ ...

  6. Redis 中的高级数据类型

    5个基础数据类型 高级功能 ① HyperLogLog (参考) 供不精确的去重计数功能,比较适合用来做大规模数据的去重统计,例如统计 UV > PFADD visitors alice bob ...

  7. 使用VISIO绘制组织结构图的操作方法

    1.确保电脑已安装VISIO软件,然后在电脑指定位置点击鼠标右键新建VISIO绘图文档. 2.打开文档,在弹出的选择绘图类型中点击商务.组织结构图,之后点击确定. 3.之后进入绘图主界面,在左侧是形状 ...

  8. K Edit Distance

    Description Given a set of strings which just has lower case letters and a target string, output all ...

  9. 016_Python3 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

  10. CSS3新增选择器:伪元素选择器

    一.  ::first-letter 第一个字 二. ::first-line 第一行(以浏览器为准的第一行) 三. ::selection 被选中的字行(鼠标选中的字段)只能向 ::selectio ...