今天是腊月27,明天是腊月28,一到过年,就习惯说农历,而不说公历。这两天挺闲的,就再造一把。

  话说Linux处理文本工具有三剑客,awk、grep、sed,其中awk最为厉害,grep也挺是常用。今天就来说一说awk,并结合mysql应用。

1.语法

 

awk '{[pattern] action}' {filenames}

  用法有很多种,但是语法总结可以写成这样,分两个部分:pattern (条件)  + action(处理动作)。

  pattern表示 awk 在数据中查找的内容,是一些正则表达式或条件判断,这个选项也可以省略。

  action是指在匹配到内容后,要执行的命令。

2.awk原理

  通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

  具体过程可以用这样的伪代码来描述

While(还有下一行) {
:读取下一行,并把下一行赋给$,各列赋给$,$...$N变量
: 用指定的命令来处理该行
}

  下面看一个例子:city.txt文本中有5行2列数据

[root@021rjsh216086s ~]# cat city.txt
BJ
SH
TJ
HZ
ZZ

 执行awk相关命令

[root@021rjsh216086s ~]# awk '{print $0}' city.txt     #$0表示一行的所有列
BJ
SH
TJ
HZ
ZZ
[root@021rjsh216086s ~]# awk '{print $1}' city.txt     #$1表示一行的第一列
BJ
SH
TJ
HZ
ZZ
[root@021rjsh216086s ~]# awk '{print $2}' city.txt     #$2表示一行的第二列

  再看第二个例子,city.txt 以竖线为分隔符。想要把数据分开,便用-F参数。

[root@021rjsh216086s ~]# cat city.txt
BJ | | a
SH | | b
TJ | | c
HZ | | d
ZZ | | e

 [root@021rjsh216086s ~]# awk 'BEGIN{FS="|"} {print $1}' city.txt  #或 awk -F"|" '{print $1}' city.txt 
 BJ
 SH
 TJ
 HZ
 ZZ

  假如分隔符同时存在多种,竖线,问好,逗号。-F参数可以指定多个。

[root@021rjsh216086s ~]# cat city.txt
BJ | ? a
SH | ? b
TJ | , c
HZ | , d
ZZ | , e
[root@021rjsh216086s ~]# awk -F '[|?,]' '{print $1,$2,$3}' city.txt #同时指定三个分隔参数
BJ a
SH b
TJ c
HZ d
ZZ e

参考文章:

    Mysql分析-awk+Threads分析状态

    Linux三剑客之awk命令

    Linux awk 命令

    AWK程序设计语言

最新文章

  1. ASP.NET Core中的project.json何去何从?
  2. matlab 绘制条形图
  3. linux下MySQL 5.6源码安装
  4. cocos2d-x 精灵遮罩
  5. imacros实现Excel数据自动录入到网页中
  6. LTTng调试: 一个系统软件工程师的随手涂鸦
  7. The Rose
  8. iphone在iframe页面的宽度不受父页面影响,避免撑开页面
  9. home目录迁移至新分区
  10. 开启flume的远程调试功能
  11. sass补充(2019-3-9)
  12. 4.DOM
  13. 2019 AI CITY CHALLENGE
  14. 致C#,致我这工作一年(上)
  15. Android利用Mediapalyer播放本地资源文件声音
  16. 使用pm2来保证Spring Boot应用稳定运行
  17. Flink - TypeInformation
  18. Android 应用授权访问GooleDrive
  19. mysql数据库给别人访问权限
  20. util.Date转化成sql.date格式

热门文章

  1. linux卸载openjdk
  2. shell 函数用法
  3. C# -- 二分法查找
  4. LeetCode算法题-Find the Difference(Java实现-五种解法)
  5. LeetCode算法题-Two Sum II - Input array is sorted
  6. MATLAB中冒号的用法
  7. SQLite事务、错误与自动回滚
  8. centos7下安装docker(18.3docker日志---logging driver---fluentd)
  9. Spring获取实现某接口的所有实例bean
  10. 匆忙记录 编译linux kernel zImage