linux命令之awk
简介
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的更多相关文章
- 【linux】linux命令grep + awk 详解
linux命令grep + awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...
- 程序猿必知必会Linux命令之awk
前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数 ...
- linux命令之awk命令
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linu ...
- Linux命令之awk数组使用范例
目录 取ifconfig bond0的IP地址 1 命令如下: 2 统计apache日志单IP访问请求数排名 2 第一种方法 2 第二种方法 2 统计域名访问量 3 ...
- Linux命令之乐--awk
1.脚本参数传值 #/bin/bash awk '"} {if(($1==a)) print $2;}' /etc/hosts 执行结果:
- linux命令和awk
1.统计一下代码量 find . -name "*.py" | xargs wc -l | awk 'BEGIN {size = 0} { size+=$1} END{print ...
- Linux命令:awk求和、平均值、最大最小值
本文链接:https://blog.csdn.net/wyqwilliam/article/details/825600431.求和cat data|awk '{sum+=$1} END {print ...
- <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...
- 转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或 ...
随机推荐
- [sqlite] 判断表、视图是否存在及常用C#操作语句
1,判断表是否存在: SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "Dom&quo ...
- CF 187C Weak Memory 优先队列 难度:2
http://codeforces.com/problemset/problem/187/C 这道题可以用二分+dfs检测,或者优先队列解 此处用了优先队列解法 从起点出发,维护一个优先队列,内容是p ...
- CF911D
题解: 简单的奇偶判断 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[N],ans,m,p,q; int main( ...
- fzu Problem 2275 Game(kmp)
Problem 2275 Game Accept: 62 Submit: 165Time Limit: 1000 mSec Memory Limit : 262144 KB Proble ...
- HDU 1198 Farm Irrigation(并查集+位运算)
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之ZwSetInformationProcess函数
1. DEP内存保护机制 1.1 DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠 ...
- 在Linux下设置定时任务(每分钟执行一次特定的shell脚本)
在当前用户下,开始编辑定时任务 crontab -e 按键 i 进入编辑模式 输入下述命令 */ * * * * sh /***/*****.sh 然后按键 Esc 退出编辑模式,再输入 wq 保存退 ...
- Tencent tinker 出现pre-verified crash
异常类型:app运行时异常 手机型号:sumsung N9008 手机系统版本:android4.4.2 tinker版本: 1.8.1 gradle版本::2.3.3 是否使用热更新SDK: Tin ...
- SpringInAction--XML配置Spring Aop
前面学习了如何用注解的方式去配置Spring aop,今天把XML配置的方法也看了下,下面顺便也做了个记录 先把spring中用xml配置aop的配置元素给贴出来: <aop:advisor&g ...
- UNIX发展史(BSD,GNU,linux)(转)
转自 UNIX发展史(BSD,GNU,linux) 这篇文章写的非常好,在这里转一下. 先前的一個理想 UNIX 系统自 1969 年 Ken ThompsonKen Thompson 与 Denni ...