简介

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. [sqlite] 判断表、视图是否存在及常用C#操作语句

    1,判断表是否存在: SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "Dom&quo ...

  2. CF 187C Weak Memory 优先队列 难度:2

    http://codeforces.com/problemset/problem/187/C 这道题可以用二分+dfs检测,或者优先队列解 此处用了优先队列解法 从起点出发,维护一个优先队列,内容是p ...

  3. CF911D

    题解: 简单的奇偶判断 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[N],ans,m,p,q; int main( ...

  4. fzu Problem 2275 Game(kmp)

    Problem 2275 Game Accept: 62    Submit: 165Time Limit: 1000 mSec    Memory Limit : 262144 KB  Proble ...

  5. HDU 1198 Farm Irrigation(并查集+位运算)

    Farm Irrigation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Tot ...

  6. 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之ZwSetInformationProcess函数

    1.    DEP内存保护机制 1.1   DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠 ...

  7. 在Linux下设置定时任务(每分钟执行一次特定的shell脚本)

    在当前用户下,开始编辑定时任务 crontab -e 按键 i 进入编辑模式 输入下述命令 */ * * * * sh /***/*****.sh 然后按键 Esc 退出编辑模式,再输入 wq 保存退 ...

  8. Tencent tinker 出现pre-verified crash

    异常类型:app运行时异常 手机型号:sumsung N9008 手机系统版本:android4.4.2 tinker版本: 1.8.1 gradle版本::2.3.3 是否使用热更新SDK: Tin ...

  9. SpringInAction--XML配置Spring Aop

    前面学习了如何用注解的方式去配置Spring aop,今天把XML配置的方法也看了下,下面顺便也做了个记录 先把spring中用xml配置aop的配置元素给贴出来: <aop:advisor&g ...

  10. UNIX发展史(BSD,GNU,linux)(转)

    转自 UNIX发展史(BSD,GNU,linux) 这篇文章写的非常好,在这里转一下. 先前的一個理想 UNIX 系统自 1969 年 Ken ThompsonKen Thompson 与 Denni ...