awk工具

简介:
awk工具

格式1:前置命令 |awk [选项] '[条件]{编辑指令}'
格式2:awk [选项] '[条件]{编辑指令}' 文件名

其中,print是最常用的编辑指令,若有多条编辑指令,可以用分号分隔。
处理文本时,若未指令分隔符,则默认将空格、制表符等作为分隔符。

常用选项:
-F:指定分隔符,可省略(默认空格或Tab位)
-V:调用外度shell变量

例:awk -F: '{print $1 "," $7}' /etc/passwd
输出/etc/passwd文件中以冒号分隔第1、7列,显示不同列之间以逗号隔开。

awk -F [:/] '{print $6 $8}' /etc/passwd
以“:”或“/”分隔文本内容,打印第6列和第8列。

awk过滤的时机
BEGIN{编辑指令} 在行前处理
在读入第一行之前执行

{编辑指令} 逐行处理
每读一行执行一次

END{编辑指令} 行后处理
在读完最后一行后执行

awk [选项] 'BEGIN{编辑指令}{编辑指令}END{编辑指令}' 文件

awk [选项] '[选项]/正则匹配/{编辑指令}' 文件

例:awk -F: '/^[a-d]/{print $2,$4}' /etc/passwd
输出以a-d开头的第2列和第4列

awk '/^a|h$/{print}' a.txt
输出以a开头或h结尾的行

awk '$6~/bin$/{print}' a.txt
输出以第6列做匹配,以bin结尾的

awk '$3!~/nologin$/{print}' a.txt
输出以第3列做匹配,不以nologin结尾的

awk内置变量
FS:保存或设置字段分隔符
$n:指定分隔的第n个字段
$0:当前读入的整行文本内容
NF:记录当前处理行的字段个数(列数)
NR:记录当前已读入行的数量(行数)

数值比较
==等于、!=不等于

大于、>=大于或等于
<小于、<=小于或等于

逻辑比较测试
&&:逻辑与 
||:逻辑或

运算符
+、-、、/、%
++、--、+=、-=、
=、/=

例: awk 'NR==3{print}' a.txt
输出第三行

awk 'NR%==1{print}' a.txt
输出奇数行

awk 'NR<=3{print}' a.txt
输出前3行

awk 'NR>=3{print}' a.txt
输出第3行到末尾行

awk '$1=="sy"{print}' a.txt
输出第1列是sy

awk -F: '$1==ENVIRON["USER"]{print $1,$6,$7}' /etc/passwd
输出当前用户的用户名、宿主目录、登录shell信息

awk 'NR>=3&&NR<=5{print}' a.txt
输出第3-5行

awk 'NR==3||NR==5{print}' a.txt
输出第3行和第5行

awk '$7!~/nologin$/||$1~/^[a-d]/{print}' a.txt
匹配第7列输出不以nologin结尾,或在第1列匹配以a-d开头

awk 'BEGIN{X=0}{x++}END{print "值" x}' a.txt
每读一行x自加1,最后打印x的值

awk 'NR%7==0||/NR~/7/{print}' a.txt
输出100以内7的倍数,或包含7的数。

awk流程控制
单分支:
if(条件){编辑指令}
双分支:
if(条件){编辑指令}else{编辑指令}
多分支:
if(条件){编辑指令}else if(条件){编辑指令}else{编辑指令}

例:awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}}else{j++}}END{print i,j}' /etc/passwd
统计UID小于或等于500,UID大于500的用户分别是多少

while循环
while(条件){编辑指令}
例:awk -F[:/] 'BEGIN{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd
统计"root"的次数

awk数组
定义数组
格式:数组名[下标]=值
调用数组
格式:数组名[下标]
遍历数组
格式:for(变量 in 数组名){print 数组名[变量]}

例:awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' a.txt
统计每个IP地址访问服务器的次数



     本文转自夜流璃雨 51CTO博客,原文链接:http://blog.51cto.com/13399294/2057571,如需转载请自行联系原作者



相关文章
|
8月前
|
运维 Shell Linux
linux文本处理工具——grep、sed、awk用法
linux文本处理工具——grep、sed、awk用法
97 1
|
Linux Perl Java
5分钟入门AWK
AWK是Linux上卓越的文本处理工具,它具有非常简单的语法结构,拥有强大的文本处理能力。AWK 是一种解释执行的编程语言,AWK 的名称是由它们设计者的名字缩写而来 —— Afred Aho, Peter Weinberger 与 Brian Kernighan。
1929 0
|
Linux Perl
linux高级命令行文本处理cut,sed,awk
cut   sort排序 wc  sed linux sed的详细指令 -i会删除 删除 替换 AWK awk命令详解   ...
1753 0
|
Linux 网络安全 Perl
Linux的文本处理工具浅谈-awk sed grep
Linux的文本处理工具浅谈 awk   老大 【功能说明】 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS竖着切,列的分隔符 RS横着切,行的分隔符 ...
1402 0
|
Unix Shell BI
awk 手册
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模式及特性, 本手册系由一些较具代表性的范例及其题解所构成; 各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明.
1117 0
|
Web App开发 Perl