正则表达式-awk-用法详解,正则表达式-awk-


awk命令

 

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

 

awk语法格式:

 

打印以冒号分隔的第1,2端

 

[root@test1 test]# awk -F ':' '{print $1,$2}' passwd |head -2

 

root x

 

bin x

 

# -F指定分隔符(不加默认为空格分隔)

 

使用自定义字符连接每个段

 

[root@test1 test]# awk -F ':' 'OFS="#" {print $1,$2,$3}' passwd |head -2

 

root*x*0

 

bin*x*1

 

[root@test1 test]# awk -F ':' '{print $1"*"$2"*"$3}' passwd |head -2

 

root*x*0

 

bin*x*1

 

匹配字符或字符串

 

[root@test1 test]# awk '/root/' passwd

 

root:x:0:0:root:/root:/bin/bash

 

operator:x:11:0:operator:/root:/sbin/nologin

 

匹配字符或字符串并输出指定段

 

[root@test1 test]# awk -F ':' '/root/ {print $1,$5}' passwd

 

root root

 

operator operator

 

打印行号和列数

 

[root@test1 ~]# awk -F ':' '{print NR":"NF}' passwd 

 

1:7

 

2:7

 

#awk内置变量 NF(段数)  NR(行数)

 

针对第一段打印匹配字符

 

[root@test1 ~]# awk -F ':' '$1~/oo/ {print $1}' passwd 

 

root

 

# ~ 模糊匹配 == 精准匹配

 

打印匹配第一段匹配或者第三段匹配的整行内容,并且输出行号

 

[root@test1 ~]# awk -F ':' '$1~/oo/ || $3>500 {print NR":"$0}' passwd 

 

1:root:x:0:0:root:/root:/bin/bas/mysqlh

 

23:izabbix:x:501:501::/home/zabbix:/sbin/nologin28374

 

#$0表示输出整行  || 或者  && 并且 > < >= <= != ==

 

[root@test1 ~]# awk -F ':' 'NR<3 && $1=="root" {print $0}' passwd 

 

root:x:0:0:root:/root:/bin/bas/mysqlh

 

打印第7段的值为3+4并用#号连接

 

7

[root@test1 ~]# awk -F ':' 'OFS="#",$7=$3+$4 {print $0}' passwd 

 

root#x#0#0#root#/root#0

 

bin#x#1#1#bin#/bin#2

 

daemon#x#2#2#daemon#/sbin#4

 

打印第三列的累加值

 

[root@test1 ~]# awk -F ':' '{(sum=sum+$3)}; END {print sum}' passwd 

 

2046

 

awk中使用if关键词 

 

[root@test1 ~]# awk -F ':' '{if ($1=="root") print $0}' passwd 

 

root:x:0:0:root:/root:/bin/bas/mysqlh

相关内容

    暂无相关文章