Linux系统命令三剑客之 awk

简介:

命令名称:awk

作用:

     对文本和数据进行处理

详细说明:

     awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。

 数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。

 它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,

 比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

语法格式:

     awk [options] 'scripts' var=value filename

常用参数:

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

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

 -v var=value 赋值一个用户定义变量,将外部变量传递给awk

awk 脚本基本结构:

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

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

工作原理:

第一步执行BEGIN 语句

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

第三步执行END语句

         echo "hello world" | awk 'BEGIN{ print "welcome" } END{ print "2017-08-08" }'

         welcome

         2017-08-08

         echo -e  "hello world" | awk 'BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }'

         welcome

         hello world

         2017-08-08

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

         [root@mingongge ~]# 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语句中双引号其实就是个拼接作用

awk 的变量使用:

     内置变量

 $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

awk 运算与判断:

     算术运算符

         + -  加减

 * / & 乘 除 求余

        ^ *  求幂

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

[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     数组中是否存在某键值

awk 正则:

     ^    行首定位符

 $    行尾定位符

 .    匹配任意单个字符

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

 +    匹配1个或多个前导字符

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

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

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

 ()   子表达式

 |    或者

 \    转义符

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

 x{m}  x字符重复m次

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

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



本文转自 民工哥 51CTO博客,原文链接:http://blog.51cto.com/mingongge/1981142

相关文章
|
5天前
|
Ubuntu 安全 Linux
《Linux 简易速速上手小册》第1章: Linux 系统基础(2024 最新版)
《Linux 简易速速上手小册》第1章: Linux 系统基础(2024 最新版)
38 1
|
4天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
监控 安全 Linux
Linux系统之安装ServerBee服务器监控工具
【4月更文挑战第22天】Linux系统之安装ServerBee服务器监控工具
33 2
|
1天前
|
缓存 Linux
linux系统缓存机制
linux系统缓存机制
|
1天前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)
|
1天前
|
Linux
【Linux】常用命令
【Linux】常用命令
17 0
|
1天前
|
安全 Ubuntu Linux
Linux 网络操作命令Telnet
Linux 网络操作命令Telnet
9 0
Linux 网络操作命令Telnet
|
2天前
|
存储 Linux Android开发
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
15 0
|
2天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
4 0
|
2天前
|
Linux 数据安全/隐私保护
Linux常用命令实例带注释
Linux常用命令实例带注释
28 0