awk 命令

AWK是linux下对文本及数据进行扫描处理,数据可以来自标准输入、文件、管道。把文件中读取到的每一行的每个字段分别进行格式化,而后进行显示;支持使用变量、条件判断、循环、数组

awk [options] ‘script‘ FILE ...
              awk [options] ‘/pattern/{action}‘ FILE ...

AWK有两处特殊的模式:GEGIN和END,被放置在没有读取任何数据之前以及在所有数据读取完后执行

模式:
                  地址定界:/pat1/,/pat2/
                  /pattern/
                !/pattern/  取反匹配的

BEGIN:执行前的做准备工作

END: 执行后的收尾工作

awk -F: ‘BEGIN{print "UserName:\n------------"}$3>500{print $1}END{print "---------------"}‘ /etc/passwd
        awk ‘BEGIN {FS=":"}$3>=500{print $1}‘ /etc/passwd   ### 执行前把分隔符改为冒号

1、AWK的分隔符与记录字段

(a)、分隔符:

输入分隔符:
                行分隔符  默认是$符、字段分隔符  默认是空白。

输出分隔符:
                行分隔符  默认是$符、字段分隔符  默认是空白。

如果想修改默认的分隔符,可以通过-F指定,或在BEGIN重新对FS进行赋值。

# awk ‘BEGIN{FS = ":"}{print $1}‘  /etc/passwd

# awk -F : ‘{print $1}‘ /etc/passwd

# echo ‘hello world:is work‘ | awk -F "[:, ]" ‘{print $3}‘  \\ 指定多个分隔符

(b)、记录字段

AWK以分隔符把从文件中读取一条记录,记录在$0中,分割后的多个字段分别存储在$1....$NF,字段的个数为NF。

# awk -F : ‘{print $1}‘  /etc/passwd    \\ 输出该文件的第一个字段

# awk -F : ‘{print $NF}‘  /etc/passwd   \\ 输出该文件的最后一个字段

# awk -F : ‘{print NF}‘  /etc/passwd   \\ 输出该文件的字段的个数

2、awk内置变量

ARGC:命令行参数的个数

FILENAME:当前输入文档的名称

FNR:输入文件的当前记录编号,当有多个文档时有用

NR:输入流的当前记录编号

NF:字段数,可以说最后一个字段
        FS: 读入行时使用的字段分隔符,默认为空白
        OFS: 输出时使用字段分隔符,默认为空白

ORS:输出记录分隔符,默认为换行\n

RS:输入记录分隔符,默认为换行\n

3、表达式与操作符

+

-

*

/

%

^ 幂运算

--

++

+=

-=

/=

<

>

<=

>=

==

!= 不等于

~ 匹配

!~ 不匹配

&&  与

|| 或

# awk -F : ‘$3>500{print $1,$3}‘ /etc/passwd

# awk -F : ‘$NF~/bash$/{print $NF}‘ /etc/passwd

# awk ‘/^$/ {x+=1} END {print x}‘ /etc/rc.d/init.d/functions
72

*****************高级应用**********************************

1、if条件判断

格式:

    if (表达式) 动作1; else动作2

awk  -F :   ‘{if ($3>500) print $1,"user";else print $1,"ADMIN"}‘  /etc/passwd

2、while循环

格式1:

while (条件)
动作

# awk ‘i=1 {} BEGIN { while (i<=10) {++i;print i}}‘

格式2:

do 
动作
while (条件)

# awk ‘BEGIN { do {++x;print x} while (x<=10)}‘

3、for循环

格式:

for (变量;条件;计数器)

动作

# awk ‘BEGIN{for(i=1;i<=10;i++) print i}‘

4、break与contiue

for (i=1;i<=10;i++) {
     if (i=5)
        continue     \\ 这里用contiue,当符合条件时就会跳出循环,只有=5时不会打印,换成break则只会打印4行。
    print i
}

5、函数

getline函数

作用,从输入中读取下一行内容,从下面df -h 输出结果可以看出,有的剩余余量在第3列,有的在第4列,这样只有通过判定NF字段数来截获数据,如果遇到NF为1的可以通过getline函数跳过当前行。

[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_system-root  \\ 一行
                       29G  1.9G   26G   7% /
tmpfs                 504M     0  504M   0% /dev/shm
/dev/sda1             194M   27M  158M  15% /boot
/dev/mapper/vg_system-var  \\一行
                       20G  584M   18G   4% /var

[[email protected] ~]# df -h | awk ‘{if(NF==1){getline;print $3};if(NF==6)print $4}‘
26G
504M
158M
18G

练习:
        1、显示GID小于500的组;
        # awk -F : ‘$3<500{print $1}‘ /etc/group
        # awk -F : ‘BEGIN{print "group name\n============="}$3<500{print $1}‘ /etc/group
        2、显示默认shell为nologin的用户;
        # awk -F : ‘$7~/nologin$/{print $1}‘ /etc/passwd
        3、显示eth0网卡文件的配置信息,注意,只显示等号后面的值;
        # awk -F = ‘{print $2}‘ /etc/sysconfig/network-scripts/ifcfg-eth0
        4、显示/etc/sysctl.conf文件中定义的内核参数;只显示名称;
        # awk -F = ‘!/^#|^$/{print $1}‘ /etc/sysctl.conf
        # awk -F = ‘/^[^#]/{print $1}‘ /etc/sysctl.conf
        5、显示eth0网卡的ip地址;通过ifconfig的命令结果进行过滤
        # ifconfig eth0 | awk ‘/inet addr/{print $2}‘ | awk -F: ‘{print $2}‘

时间: 2024-12-23 23:18:22

awk 命令的相关文章

linux awk命令详解2

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value '  '          引用代码块 BEGIN   初始化代码块,在对每一行进行处理之前,初始

awk命令详解二

awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 1.   调用awk: 第一种命令行方式,如: awk [-Field-separator] 'commands' input

报告生成器-awk命令

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk ) 格式: awk [options] 'script' file1 file2,... awk [

awk命令统计某程序的CPU总的利用率

有时候我们需要统计系统中某一个程序的CPU利用率来做监控,而这个程序可能有多个进程或者多个线程,我们可以先匹配到该程序的所有进程或者线程,然后计算所有线程或者进程的CPU利用率的和,从而算出该程序的CPU总的利用率. 下面我们以nginx程序为例. [email protected]:# ps aux | grep nginx |grep -v grep |awk '{sum+=$3;}END{print sum}' 0 如果要统计mysql所有进程的CPU利用率,则将nginx换成mysql即

linux 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

【转】【Linux】linux awk命令详解

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

sed及awk命令的使用

sed命令 sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. 命令格式 sed [options] 'comman

Linux awk命令简单操作

AWK Command: 一 : print print item1,item2,.......... 要点: 1.各项目之间使用逗号隔开,而输入时则以空白字符分隔 2.输出的item可以为字符串或树枝,当前记录的字段(如$1).变来那个或awk的表达式,树枝会转换成字符串 3.print命令后面的item可以省略,此时其功能相当于print $0,以此,如果想输出空白行,则需要print "" 例子: 1.awk 'BEGIN { pring "line one\n lin

redhat 中awk命令的使用

awk是linux环境中一个强大的报告生成的命令,学会使用这个命令会在生产环境中对工作效率有很大的提升 awk使用的基本格式是: #awk [options] 'scripts' file1 file2 #awk [options] 'PATTERN {action}' file1 file2,...     print,printf awk的输出方式: 一.print print的使用格式: print item1, item2, ... 要点: 1.各项目之间使用逗号隔开,而输出时则以空白字