简介

awk命令的名称是取自三位创始人Alfred Aho 、Peter Weinberger 和 Brian Kernighan姓名的首字母,awk有自己的程序设计语言,设计简短的程序,读入文件,数据排序,处理数据,生成报表等功能。

awk 通常用于文本处理和报表生成,最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。

awk 通常以文件的一行为处理单位的,awk每接收文件的一行,然后执行相应的命令,来处理文本,完整的awk脚本通常用来格式化文本文件中的信息

使用方式

            awk '{pattern + action}' {filenames}

pattern 表示 AWK 在数据中查找的内容,正则表达式,用斜杠括起来

action 是在找到匹配内容时所执行的一系列命令

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

使用说明

[hebinbin@iZ25y8wtfbqZ ~]$ awk '{print $0}' /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin

依次对/etc/passwd 中的每一行执行 print 命令,所有输出都发送到 stdout,所得到的结果与执行 cat /etc/passwd 完全相同

$0 $n表示

-F参数:指定分隔符,可指定一个或多个

root@iZ25me8kko3Z:~# awk -F "/" -F ":" '{ print $1 " " $9 " " $0 }' /etc/passwd
root root:x:::root:/root:/bin/bash
daemon daemon:x:::daemon:/usr/sbin:/bin/sh
bin bin:x:::bin:/bin:/bin/sh
sys sys:x:::sys:/dev:/bin/sh

只查看test.txt文件20-30行内容

root@iZ25me8kko3Z:~# awk '{if(NR>=20 && NR<=30) print $1}' test.txt
sock.close()
print('%s
break
elif
data
data
#print(data)
#print(clients)
#if
if
print(data)

BEGIN 和 END 模块

awk 在开始处理输入文件之前会执行 BEGIN 块,处理了输入文件中的所有行之后执行END块

统计/etc/passwd的账户人数

root@iZ25me8kko3Z:~# awk '{count++;print $0;} END{print "user count is ",count}' /etc/passwd
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/bin/sh
.................
user count is

count是自定义变量,没有初始化默认是0,action{}中的多个语句用 ;隔开

root@iZ25me8kko3Z:~# awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' /etc/passwd
[start] user count is
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/bin/sh
.....................
[end] user count is

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

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

awk运算符

root@iZ25me8kko3Z:~# awk 'BEGIN{a=5;a+=5;print a}'
10

root@iZ25me8kko3Z:~# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}'
  0 1

root@iZ25me8kko3Z:~# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}'

root@iZ25me8kko3Z:~# awk 'BEGIN{a="100testaa";if(a~/100/) {print "ok"}}'
ok
root@iZ25me8kko3Z:~# echo|awk 'BEGIN{a="100testaaa"}a~/test/{print "ok"}'
ok
root@iZ25me8kko3Z:~# awk 'BEGIN{a=11;if(a>=9){print "ok"}}'
ok
root@iZ25me8kko3Z:~# awk 'BEGIN{a;if(a>=b){print "ok"}}'
ok
root@
root@iZ25me8kko3Z:~# awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'
ok
root@iZ25me8kko3Z:~# awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'
err

awk内置变量

awk正则使用

awk '/REG/{action} ' file,/REG/为正则表达式,可以将$0 中,满足条件的记录送入到:action 进行处理

root@iZ25me8kko3Z:/etc# awk '/root/{print $0}' passwd
root:x:::root:/root:/bin/bash

awk '布尔表达式{action}' file 仅当对前面的布尔表达式求值为真时, awk 才执行代码块

root@iZ25me8kko3Z:/etc# awk -F: '$1=="root"{print $0}' passwd
root:x:::root:/root:/bin/bash

awk 的 if、循环和数组

if条件语句

{
if ($=="foo"){
if($=="foo"){
print "uno"
}else{
print "one"
}
}elseif($=="bar"){
print "two"
}else{
print "three"
}
}

循环结构

do...while

{
count=1do {
print "I get printed at least once no matter what"
} while ( count != )
}

for

for ( initial assignment; comparison; increment ) {
code block
}

break  continue

x=
while() {
  print "iteration", x
  if ( x== ) {
    break
  }
  x++
}
x=1while () {
if ( x== ) {
x++
continue
}
print "iteration", x
if ( x> ) {
break
}
x++
}

 数组   AWK 中的数组都是关联数组,数字索引也会转变为字符串索引

{
cities[]=”beijing”
cities[]=”shanghai”
cities[“three”]=”guangzhou”
for( c in cities) {
print cities[c]
}
print cities[]
print cities[“”]
print cities[“three”]
}

常用字符串函数

linux命令之awk的更多相关文章

  1. 【linux】linux命令grep + awk 详解

    linux命令grep  +  awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...

  2. 程序猿必知必会Linux命令之awk

    前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数 ...

  3. linux命令之awk命令

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

  4. Linux命令之awk数组使用范例

    目录 取ifconfig bond0的IP地址    1 命令如下:    2 统计apache日志单IP访问请求数排名    2 第一种方法    2 第二种方法    2 统计域名访问量    3 ...

  5. Linux命令之乐--awk

    1.脚本参数传值 #/bin/bash awk '"} {if(($1==a)) print $2;}' /etc/hosts 执行结果:

  6. linux命令和awk

    1.统计一下代码量 find . -name "*.py" | xargs wc -l | awk 'BEGIN {size = 0} { size+=$1} END{print ...

  7. Linux命令:awk求和、平均值、最大最小值

    本文链接:https://blog.csdn.net/wyqwilliam/article/details/825600431.求和cat data|awk '{sum+=$1} END {print ...

  8. <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...

  9. 转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或 ...

随机推荐

  1. 【python常见面试题】之python 中对list去重的多种方法

    在python相关职位的面试过程中,会对列表list的去重进行考察.(注意有时会要求保证去重的顺序性) 1.直观方法 li=[1,2,3,4,5,1,2,3] new_li=[] for i in l ...

  2. Redis数据结构:跳跃表

    1. 跳跃表是有序集合(zset)的底层实现之一: 2. 由zskiplist和zskiplistNode组成: 3. 每个跳跃表节点的层数都是1-32之间的随机数(每创建一个节点的时候,程序会随机生 ...

  3. C# 用Mutex或进程限制一台电脑上同时打开多个实例

    private void Form1_Load(object sender, EventArgs e)        {            bool requestInitialOwnership ...

  4. LINUX系统下的数据库的管理

    环境:配置好IP和YUM源  一.数据库的安装及密码的修改 [1]yum  install  mariadb-server  -y       ##安装mariadb数据库 [2]systemctl  ...

  5. IE中在a标签里的图片会显示边框

    例如: <a><img src="/UI/Images/ss.jpg"></a>,图的边框会出现a标签默认的边框, 解决办法: img{bord ...

  6. apache+php 字符编码问题解决

    如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312.对于新手而且是只用GB2312编码的开发人来说, ...

  7. Java API操作ZK node

    创建会话 建立简单连接 /** * 测试创建Zk会话 * Created by liuhuichao on 2017/7/25. */ public class ZooKeeper_Construct ...

  8. Vim技能修炼教程(5) - 操作符实务

    操作符实务 操作符复习 上次我们讲了操作符与文本对象的组合这样一个vim的强大功能.但是上节的知识点过于密集,可读性可能差了一点.不过没关系,重要的知识点在后面用到的时候我们可以先复习一下. 我们还是 ...

  9. Android Studio3.0 Kotlin工程问题集

    问题1: 新建支持Kotlin的Android项目,卡在"Resolve dependency :classpath" 解决分析: 一般碰到"Resolve depend ...

  10. 新浪云使用smarty模板的方法

    在部署到sina app engine(sae)上时出现了问题,因为sae作为云计算平台式无法进行文件读写操作的,所以Smarty中输出的缓存文件就无法实现. 错误信息:“SAE_Fatal_erro ...