awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

1
awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

awk内置变量

1
2
3
4
5
6
7
8
9
10
11
12
13
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
$NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数

awk 替换后写入文件awk的sub/gsub函数用来替换字符串

1
sub(/regexp/, replacement, target)

注意第三个参数target,如果忽略则使用$0作为参数,即整行文本。

例子1:替换单个串

只把每行的第一个AAAA替换为BBBB

1
awk '{ sub(/AAAA/,"BBBB"); print $0 }' t.txt

例子2:替换所有的串

把每一行的所有AAAA替换为BBBB

1
awk '{ gsub(/AAAA/,"BBBB"); print $0 }' t.txt

例子3:替换满足条件的行的串

只在出现字符串CCCC的前提下,将行中所有AAAA替换为BBBB

1
2
3
awk '/CCCC/ { gsub(/AAAA/,"BBBB"); print $0; next }
            { print $0 }
    ' t.txt

例子4:替换多个可选串

不管是AAAA,还是CCCC,全部替换为BBBB

1
awk '{ gsub(/AAAA|aaaa/,"BBBB"); print $0 }' t.txt

例子5:全字匹配替换

全字匹配AAAA;即不匹配AAA,以及AAAAA,也就是说完整的四个字符串AAAA。

1
awk '{ sub(/\<AAAA\>/,"BBBB"); print $0 }' t.txt

例子6:规则表达式匹配

把所有以A开头,不管后面连续包含几个A的串替换成一个字符B。

1
awk '{ gsub(/^A*/,"B"); print $0 }' t.txt

awk 替换后写入文件

1
awk '{gsub(/tomcat/,"tomcatxxxx"); print $0 }' content.txt > test.tmp && mv test.tmp content2.txt

替换满足条件的行的串

awk '/release/ { gsub(/false/,"true"); print $0; next }{ print $0 }' /home/yang/src/config.js > /home/yang/src/config.tmp && mv /home/yang/src/config.tmp /home/yang/src/config.js

最新文章

  1. JSON and Microsoft Technologies(翻译)
  2. AngularJS 技术总结
  3. [AS3.0] Error #2044: 未处理的 NetStatusEvent:。 level=error, code=NetStream.Record.NoAcces 解决办法
  4. C# WebApi传参之Post请求-AJAX
  5. 说说Thread.Sleep(0)的那些奇怪的事
  6. spring 源码之 ioc 容器的初始化和注入简图
  7. nodeJS之域名DNS
  8. Jmeter_上传与下载
  9. Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)
  10. MariaDB Galera集群部署--技术流ken
  11. BZOJ5326 : [Jsoi2017]博弈
  12. C# int数据类型呵呵
  13. 使用kbmmw 生成REST 服务OpenAPI函数原型
  14. Python数据分析Numpy库方法简介(一)
  15. 开发微信小程序——古龙小说阅读器
  16. confluence 新tab 页面打开 kibana short link
  17. PyCharm 设置Python 文件头部模板
  18. MeshLab显示纹理贴图
  19. 熟悉SQL Server 数据类型
  20. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)

热门文章

  1. 关于精准UWB人员定位系统解决方案
  2. python调用golang代码
  3. java.net.ConnectException: Your endpoint configuration is wrong; For more details see: http://wiki.apache.org/hadoop/UnsetHostnameOrPort
  4. Windows流媒体怎么关闭。
  5. Pytorch实战学习(七):高级CNN
  6. 多线程问题sleep与wait
  7. JAVA常用类(一)Syatem类
  8. AXI 协议翻译介绍
  9. KMS服务器 激活win 和 office
  10. adb命令之monkey使用