Linux三剑客命令之Awk

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux三剑客命令之Awk

 Awk  pattern scanning and processing language

  对文本和数据进行处理

 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输(stdin)、一个或多个文件,或其它命令的输出。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

  awk [options] ‘scripts’ var=value filename

  -F 指定分隔符(可以是字符串或正则表达式)

  -f 从脚本文件中读取awk命令

  -v var=value 赋值变量,将外部变量传递给awk

  awk ‘BEGIN{ print “start” } pattern{ commands } END{ print “end” }’ filename

一个awk脚本通常由BEGIN语句+模式匹配+END语句三部分组成,这三部分都是可选项

工作原理:

   第一步执行BEGIN 语句

   第二步从文件或标准输入读取一行,然后再执行pattern语句,逐行扫描文件到文件全部被读取

   第三步执行END语句

实例展示:

echo “hello “ | awk ‘BEGIN{ print “welcome” } END{ print “2017-08-08” }’

welcome

2017-08-08

echo -e “hello” | awk ‘BEGIN{ print “welcome” } {print} END{ print “2017-08-08” }’

welcome

hello

2017-08-08

#不加print参数时默认只打印当前的行

echo|awk ‘{ a=”hello”; b=”nihao”; c=”mingongge”; print a,b,c; }’

hello nihao mingongge

#使用print以逗号分隔时,打印则是以空格分界

echo|awk ‘{ a=”mgg”; b=”mingg”; c=”mingongge”; print a” is “b” or “c; }’

mgg is mingg or mingongge

#awk的print语句中双引号其实就是个拼接作用

内置变量

$0   #当前记录

$1~$n #当前记录的第N个字段

FS   #输入字段分隔符(-F相同作用)默认空格

RS   #输入记录分割符,默认换行符

NF   **#字段个数就是列 **   

NR  ** #记录数,就是行号,默认从1开始**

OFS  #输出字段分隔符,默认空

ORS  #输出记录分割符,默认换行符     

外部变量

[mingongge@ ~]#a=100

[mingongge@ ~]#b=100

[mingongge@ ~]#echo |awk ‘{print v1*v2 }’ v1=$a v2=$b

10000

算术运算符

    •  加减
  • / & 乘 除 求余

^ *  求幂

++ – 增加或减少,作为前缀或后缀

[mingongge@ ~]#awk ‘BEGIN{a=”b”;print a,a++,a–,++a;}’

b 0 1 1

[mingongge@ ~]#awk ‘BEGIN{a=”0”;print a,a++,a–,++a;}’

0 0 1 1

[mingongge@ ~]#awk ‘BEGIN{a=”0”;print a,a++,–a,++a;}’

0 0 0 1

#和其它编程语言一样,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0

赋值运算符

= += -= *= /= %= ^= **=

正则运算符

~ !~  匹配正则表达式/不匹配正则表达式

**逻辑运算符 ** 

||  &&  逻辑或  逻辑与

关系运算符

= = != = 

其它运算符

$   字段引用 

空格 字符串链接符

?:   三目运算符

ln   数组中是否存在某键值

^    行首定位符

$    行尾定位符

.    匹配任意单个字符

  •    匹配0个或多个前导字符(包括回车)
  •    匹配1个或多个前导字符

?    匹配0个或1个前导字符   

[]   匹配指定字符组内的任意一个字符/^[ab]

[^]  匹配不在指定字符组内的任意一个字符

()   子表达式

|    或者

   转义符

,! 匹配或不匹配的条件语句

x{m} x字符重复m次

x{m,} x字符至少重复m次

X{m,n} x字符至少重复m次但不起过n次(需指定参数-posix或–re-interval)

更多Awk的介绍,请关注公众号后续内容或者参考AWK官方文档

END

Linux三剑客命令之Awk Linux三剑客命令之Awk

写文不易,如有帮助,扫码即刻打赏吧!!!

Linux三剑客命令之Awk
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux三剑客命令之Awk


 上一篇
Linux系统集群架构线上项目配置实战 五(完结篇) Linux系统集群架构线上项目配置实战 五(完结篇)
写在前面   今天介绍项目后期的全网数据备份规划与配置过程,整个过程包括备份规划、脚本编写、数据同步等 数据备份规划如下 数据库 从库开启binlog,通过全备与增量备份来进行,每天00:00全备一次,每天12:00增量备份一次,初期
2021-04-05
下一篇 
Linux三剑客命令之Grep Linux三剑客命令之Grep
命令名称:grep 命令作用: **   文本查找或搜索工具** 详细说明: **    同样可以配合正则表达式来搜索文本,并将匹配的行打印输出,也可用于过滤与搜索特定字符串,使用十分灵活** 常用参数: -a  #不要忽略二进制数据 -A
2021-04-05