一. 基本使用方法:

awk '{pattern + action}' filenames  #其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本

花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。

pattern是要表示的正则表达式,可以用斜杠括起来。

例1:

[root@Gin scripts]# awk '{print "hiya"}' /etc/passwd
hiya
hiya
hiya
hiya

你将会见到/etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk时,我们指定/etc/passwd 作为输入文件。执行 awk 时,它依次对/etc/passwd 中的每一行执行 print 命令。

例子2

ps -ef | grep tomcat | awk '/java/' | awk '{print $2}'

这里的awk  '/java/' 会取出所有包含java字段的所有行,然后输出为空格为分隔符的第2个字段。

二.实战案例

还以eth0的输出信息为例,取出10.0.0.7的地址段

方法如下

方法一
ifconfig etho | grep "inet addr" | awk -F "[ :]+" '{print $4}’ 方法二
  ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}'

说明

1. 使用了awk多分隔符[ :],表示以空格,或者:为分隔符,这里的【】其实是正则表达式的基本用法

2. 符号“+”表示至少有一个空格或者冒号来做分隔符,所以“inet ”前面的11个空格可以看做是1个分隔符,所取的10.0.0.7属于第4列

3. awk的默认分隔符为空格

4. {print $4}是取第4列并输出到屏幕,$NF表示最后一列,$0表示整行,NR表示第几行。

三. 文本中各字段在awk中的含义

例子1,取出test.txt文档中第20-30行,文本内容是1-100,每行一个整数

[root@Gin scripts]# awk '{if(NR>=20 && NR<=30) print $1}' test.txt   

例子2,若test.txt文本内容为  "I am Poe,my qq is 33794712",请从该文件中过滤出'Poe'字符串与33794712,最后输出的结果为:Poe 33794712

[root@Gin scripts]# awk -F '[ ,]+' '{print $3" "$7}' test.txt
Poe

四. BEGIN和END模块

通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。

因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息

例1. 统计/etc/passwd的账户人数

[root@Gin scripts]# awk '{count++;print $0;} END{print "user count is ",count}' passwd
root:x:::root:/root:/bin/bash
..............................................
user count is

count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:

[root@Gin scripts]# awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' passwd
[start] user count is
root:x:::root:/root:/bin/bash
...................................................................
[end] user count is

例2:统计某个文件夹下的文件占用的字节数

[root@Gin scripts]# ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'
[end]size is

如果以M为单位显示:

[root@Gin scripts]# ll |awk 'BEGIN{size=0;} {size=size+$5;} END{print "[end]size is ",size/1024/1024,"M"}'
[end]size is 0.00142002 M

awk常用用法的更多相关文章

  1. Shell之awk常用用法

  2. grep参数说明及常用用法

    grep参数说明及常用用法 趁着午休的时间把自己经常使用的一些grep命令整理一下. 方便以后查看. 后续会逐步把awk/sed/find等常用的命令理一理. 增强下记忆. 也算是对得起自己了. ^^ ...

  3. Linux sed 和 awk的用法

    sed用法: 原文链接:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管 ...

  4. 文本处理三剑客之AWK的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  5. awk 常用选项及数组的用法和模拟生产环境数据统计

    awk 常用选项总结 在 awk 中使用外部的环境变量 (-v) awk -v num2="$num1" -v var1="$var" 'BEGIN{print ...

  6. <三剑客> 老大:awk命令用法

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一 个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...

  7. sed知识及常用用法梳理

    1.sed命令简介及其参数说明 sed流编辑器,擅长对文本进行增删改查,过滤指定的字符串和取指定行,也可以在行中字符串前后插入内容,功能非常强大. 注意:sed默认只支持基本的正则表达式,如果要想支持 ...

  8. awk命令_Linux awk 命令用法详解

    本文索引 awk命令格式和选项 awk模式和操作 模式 操作 awk脚本基本结构 awk的工作原理 awk内置变量(预定义变量) 将外部变量值传递给awk awk运算与判断 算术运算符 赋值运算符 逻 ...

  9. centos的vi常用用法

    centos的vi常用用法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...

随机推荐

  1. 【CodeForces148D】Bag of mice

    题意 dragon和princess玩一个游戏.开始的时候袋子里有w个白老鼠和b个黑老鼠.两个人轮流从袋子里面往外摸老鼠.谁先拿到白老鼠谁先获胜.dragon每次抓出一只老鼠,剩下老鼠里面都会有一只跳 ...

  2. Nginx源码完全注释(8)ngx_errno.c

    errno.h中的strerror(int errno)可以确定指定的errno的错误的提示信息.在 Nginx 中,将所有错误提示信息预先存储在一个数组里,而预先确定这个数组的大小,是在自动化脚本中 ...

  3. Spring中Aspect的切入点的表达式定义细节

    用过很多次切面aspect了,对于表达式总是记得很模糊,今天总结一下. 1.切面做如下设置则只会拦截返回值为String类型的方法 @Aspect public class MyInterceptor ...

  4. 380. Insert Delete GetRandom O(1) 设计数据结构:在1的时间内插入、删除、产生随机数

    [抄题]: Design a data structure that supports all following operations in average O(1) time. insert(va ...

  5. 解题报告Best Time to Buy and Sell Stock with Cooldown

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  6. c++ std::unordered_set

    std::unordered_set template < class Key, // unordered_set::key_type/value_type class Hash = hash& ...

  7. DEPENDS工具和DUMPBIN工具使用

    在系统部署运行时我们经常发现某个程序在开发机器中可以运行,但是部署在某台PC上缺不能运行,也存在在某些机器上可运行换一台机器却不能运行.主要表现出两种现象:        (1).运行.调试时出现程序 ...

  8. Linux静态库与动态库详解

    引言 为了代码的复用性和模块化,我们常常使用一些库文件,在Windows操作系统下位.lib .dll作为静态库和动态库的后缀名. 在Linux下,静态链接库名字一般为libabcdef.a,其中ab ...

  9. 洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环

    虫洞(wormhole) FJ 在农场上闲逛时,发现他的农场里有很多虫洞.虫洞是一条特殊的有向路径,当 FJ 从它的一头走到另一头后,他将被传送到过去的某个时刻.FJ 的每个农场包括 N(1<= ...

  10. ajax 整个表单的提交

    重点:data: $("#form1").serialize() function setSaveNext() { setSaveData(); var cx = pageInde ...