简介

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. ts结合vue使用的感悟

    TypeScript 前端现在越来越强大,多人开发更是常见,加上各大框架都开始支持TypeScript,而谷歌和微软又更加积极,导致不得不去学习,顺道通过js来了解ts,再通过ts来了解强类型语言.一 ...

  2. SVM之解决线性不可分

    SVM之问题形式化 SVM之对偶问题 SVM之核函数 >>>SVM之解决线性不可分 写在SVM之前——凸优化与对偶问题 上一篇SVM之核函数介绍了通过计算样本核函数,实际上将样本映射 ...

  3. LeetCode OJ:Isomorphic Strings(同构字符串)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  4. Datastage8.5导入导出DS作业例子

    以下为Datastage8.5的命令行方式的导入和导出,直接登陆服务器执行如下命令即可.不是Datastage客户端的导入和导出,使用命令行方式的好处是:可以将该命令使用shell脚本进行调用导入和导 ...

  5. C++面向对象高级编程(四)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“ ...

  6. APUE学习笔记——5.9Binary I/O 二进制读写

    概述:         二进制I/O,通常用来一次性读写结构化的数据块.(因为有时候我们要读写的数据中包含换行符或者Null字符,无法使用fgets或fputs,而使用getc和putc又需要花费太多 ...

  7. 自己定义的Excetpion继承哪个异常有什么讲究?[待解答]

    try catch的地方需要用到一个自定义的DBException,如下: 于是我就自定义了一个DBException,继承Excetpion,以父类Exception构造器创建构造器: DBExce ...

  8. 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案

    安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...

  9. Java之JVM逃逸分析

    引言: 逃逸分析(Escape Analysis)是众多JVM技术中的一个使用不多的技术点,本文将通过一个实例来分析其使用场景. 概念 逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配 ...

  10. 为什么写《Tomcat内核设计剖析》

    三四年前更多地还是做web业务开发,基本不关心web层以下的东西,但是每次出故障时面对现象都不能从脑子里形成由底层到应用层的完整的逻辑,往往只能分析到Web应用就无法继续往下,Web容器完全就是一个黑 ...