awk使用入门详解

一、awk概述

“奥克”

awk:报告生成器,格式化打印

把文件中读取到的每一行的每一个字段分别进行格式化,而后进行显示

内部支持变量、条件判断、循环、数组

awk --> new awk --> nawk(收费)

GNU awk --> gawk "告克"

二、awk的使用

   awk和默认以任意个空白符为分隔符,而cut默认的是制表符,而且只能指定以一个空格符为分隔符

注意:与sed一样使用‘’不要使用""容易报错

用法格式:

awk [OPTIONS] ‘SCRIPT‘ FILE...

awk [OPTIONS] ‘pattern/{action}‘ File...

action:

print,默认打印

pattern:

包括地址定界:

/pat1/,/pat2/

/pattern/

!/pattern

expression:表达式:>,<,=,>=,<=,=,!=,~

BEGIN:执行前的准备工作

END:执行后的收尾工作

awk常用的四种分隔符:

输入:

行分隔符:默认换行符:“$",cat -A可以查看文件的所有空白字符

字段分隔符:默认制表符

输出:

行分隔符:默认换行符:“$"

字段分隔符:空白

awk的内置变量:

$1,$2,$3...:第2个字段,第2个字段,第3个字段...

$0:表示整行

$NF:表示最后一个字段, NF:表示总字段数

FS:读入行时使用的字段分隔符.默认空白

OFS:输出行时使用的字段分隔符.默认空白

[[email protected] shell]# awk -F : ‘/^root/ {print $1}‘ /etc/passwd
root
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print $1}‘ /etc/passwd   
root
[[email protected] shell]# awk -F : ‘/^root/ {print $1,$7}‘ /etc/passwd     #逗号只是命令的一部分,不是输出的结果
root /bin/bash
[[email protected] shell]# awk -F : ‘/^root/ {print $1$7}‘ /etc/passwd
root/bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print username $1,$7}‘ /etc/passwd
root /bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print username sb$1,$7}‘ /etc/passwd
root /bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print username sb $1,$7}‘ /etc/passwd
root /bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb" $1,$7}‘ /etc/passwd
username sbroot /bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,$7}‘ /etc/passwd
username sb root /bin/bash
[[email protected] shell]# ^C
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,nihao$7}‘ /etc/passwd
username sb root /bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,"nihao"$7}‘ /etc/passwd
username sb root nihao/bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,"nihao"$7sb}‘ /etc/passwd
username sb root nihao/bin/bash
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,"nihao"$7"sb"}‘ /etc/passwd
username sb root nihao/bin/bashsb
[[email protected] shell]# awk -F: ‘/^\<root\>/ {print "username sb " $1,"nihao"$7"\nsb"}‘ /etc/passwd
username sb root nihao/bin/bash
sb
[[email protected] shell]# df -h|awk  ‘{print $1}‘
Filesystem
/dev/sda2
tmpfs
/dev/sda1
/dev/sda5
[[email protected] shell]# df -h|awk  ‘{print $2}‘
Size
29G
495M
477M
68G
[[email protected] shell]# df -h|awk  "{print $2}" 
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        29G  4.6G   23G  17% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       477M   28M  424M   7% /boot
/dev/sda5        68G  4.3G   60G   7% /usr
[[email protected] shell]# df -h|awk  ‘{print}‘   
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        29G  4.6G   23G  17% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       477M   28M  424M   7% /boot
/dev/sda5        68G  4.3G   60G   7% /usr

1、取/etc/passwd中uid大于500的用户名

[[email protected] shell]# awk -F: ‘$3>=500{print "Username: "$1}‘ /etc/passwd           
Username: testbash
Username: basher
Username: nologin
Username: fedora
Username: user1
Username: bash1
Username: xj
Username: Oracle
Username: bash
Username: xxj
Username: openstack
Username: centos

2、取/etc/passwd中以bash结尾的行

[[email protected] shell]# awk -F: ‘$7~/bash$/{print}‘ /etc/passwd
root:x:0:0:chfn root:/root:/bin/bash
testbash:x:501:501::/home/testbash:/bin/bash
basher:x:502:502::/home/basher:/bin/bash
fedora:x:504:504::/home/fedora:/bin/bash
user1:x:505:505::/home/user1:/bin/bash
bash1:x:506:506::/home/bash1:/bin/bash
xj:x:507:507::/home/xj:/bin/bash
Oracle:x:3000:3000::/home/database:/bin/bash
bash:x:3001:3001::/home/bash:/bin/bash
xxj:x:3002:3002::/home/xxj:/bin/bash
openstack:x:3003:3003::/home/openstack:/bin/bash
centos:x:3004:3004::/home/centos:/bin/bash
[[email protected] shell]# awk -F: ‘/bash$/{print "sbsb: "$0}‘ /etc/passwd          
sbsb: root:x:0:0:chfn root:/root:/bin/bash
sbsb: testbash:x:501:501::/home/testbash:/bin/bash
sbsb: basher:x:502:502::/home/basher:/bin/bash
sbsb: fedora:x:504:504::/home/fedora:/bin/bash
sbsb: user1:x:505:505::/home/user1:/bin/bash
sbsb: bash1:x:506:506::/home/bash1:/bin/bash
sbsb: xj:x:507:507::/home/xj:/bin/bash
sbsb: Oracle:x:3000:3000::/home/database:/bin/bash
sbsb: bash:x:3001:3001::/home/bash:/bin/bash
sbsb: xxj:x:3002:3002::/home/xxj:/bin/bash
sbsb: openstack:x:3003:3003::/home/openstack:/bin/bash
sbsb: centos:x:3004:3004::/home/centos:/bin/bash
[[email protected] shell]# awk -F: ‘$7=="/bin/bash" {print $1}‘ /etc/passwd  
root
testbash
basher
fedora
user1
bash1
xj
Oracle
bash
xxj
openstack
centos

BEGIN,END:

[[email protected] shell]# awk -F: ‘$3>=500 {print "-------------\n"$1}‘ /etc/passwd 
-------------
testbash
-------------
basher
-------------
nologin
-------------
fedora
-------------
user1
-------------
bash1
-------------
xj
-------------
Oracle
-------------
bash
-------------
xxj
-------------
openstack
-------------
centos
[[email protected] shell]# awk -F: ‘BEGIN{print "Username\n----------"}$3>=500 {print $1}‘ /etc/passwd
Username
----------
testbash
basher
nologin
fedora
user1
bash1
xj
Oracle
bash
xxj
openstack
centos
[[email protected] shell]# awk -F: ‘$3>=500 {print $1}END{print "-------"}‘ /etc/passwd
testbash
basher
nologin
fedora
user1
bash1
xj
Oracle
bash
xxj
openstack
centos
-------
[[email protected] shell]# awk ‘BEGIN{FS=":"} $3>=500 {print $7} ‘ /etc/passwd
/bin/bash                           #用BEGIN指定分隔符
/bin/bash
/sbin/nologin
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash

练习:

1、显示GID小于500的组

# awk -F: ‘$3<500{print $1}‘

2、显示默认shell为nologin的用户

# awk -F: ‘/\<nologin$/ {print $1}‘

# awk -F: ‘$7=="/sbin/nologin" {print $1}‘

3、显示eh0网卡文件的配置信息,注意只显示=后面的值

# awk -F= ‘{print $2}‘

4、显示/etc/sysctl.conf文件中定义的内核参数,只显示名称

5、显示eth0网卡的ip地址,通过Ifconfig的命令结果进行过滤

# ifconfig eth0|awk ‘/inet addr/{print}‘|awk -F: ‘{print $2}‘|awk ‘{print $1}‘

时间: 2024-10-31 18:22:29

awk使用入门详解的相关文章

AWK用法入门详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

linux中的awk用法入门详解(一)

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

【转】Asp.Net MVC3 简单入门详解过滤器Filter

原文地址:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html 前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码,那我们可以通过AOP截取实现,而在MVC项目中我们就可以直接使用它提供的Filter的特性帮我们解决,不用自己实现复杂的AOP了. 在Asp.net Mvc

webpack入门详解

webpack入门详解(基于webpack 3.5.4  2017-8-22) webpack常用命令: webpack --display-error-details    //执行打包 webpack -w               // 提供watch方法:实时进行打包更新 webpack -p           // 对打包后的文件进行压缩 webpack -d            // 提供source map,方便调式代码 webpack -dev-server --open 

Quartz 入门详解

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表.Jobs可以做成标准的Java组件或 EJBs.官方网站:http://www.opensymphony.com/quartz 相关Jar:   quartz-all-1.6.0.jar   jta.jar   commons-logging-1.1.jar

Linq之旅:Linq入门详解(Linq to Objects)

示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集成查询).通过LINQ,我们可以使用相同API操作不同的数据源.接下来就让我们看看LINQ是什么以及如何使用? 再此之前,需要先了解的相关技术 1. 隐式类型.匿名类型.对象初始化器 1) 隐式类型,使用var关键字创建,C#编译器会根据用于初始化局部变量的初始值推断出变量的数据类型.(不过我个人认

SQL注入攻防入门详解(2)

SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文

[转]SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么

SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么