awk 是一个强大的文本处理工具,它将文本逐行读入,并进行切片,默认以空白格为分割符,对单个切片进行分析,处理。

用法:

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

选项:

  -F : 指定地段分割符:默认分割符为空白字符

如:[root@localhost@~]#awk '{print $2,$4}' /etc/fstab

print :显示第2段和第4段, 对个参数之间用,号分割

输出的可以是:字符串,数值,当前字段  变量 或 表达式

awk  ‘{print "hello",$1,$2,6}’

变量:

  内建变量:

    FS 输入分割符就等于  -F      --- awk  -v  FS=':' '{print  $1,$2,$3}'    =    awk -F: '{print $1,$2,}'

    OFS 输出分隔符   awk  -v  OFS=“:” ‘{print  $1,$2.$3}’

也可以一起设定:awk  -v FS=’:’  -v OFS=’:’  ‘{print $1,$2.$3}’  /etc/passwd

        NF : 输出每一行统计的字段数

    NR:行数,可以设定行号

    FNR :文件中行数 各文件分别计数

    FILENAME : 文件名 每行都会显示一次文件名 有多少行显示多少次文件名

    

    ARGC:  命令行参数的个数

   ARGV : 数组 保存命令行中的个参数

    BEGIN:显示一次: awk ‘BEGIN{print }’

    END{}:j仅在文本处理完成后执行一次

  自定义变量:  -v  var=value

    awk -v test='hello' 'BEGIN{print test}'

     awk  'BEGIN{test="hello"; print test}'

printf 命令:格式化输出命令

  awk '{printf ARGC}' /etc/fstab

  注意 不会换行需要给出换行符\n

  3FORMAT中需要分别为后面的每一个item指定一个格式化符号

    格式化符号:

        

%c ;显示字符SACII码

%d  %i  ;显示十进制整数

%e,E  科学计数法数值显示

%f    显示浮点数

%s  显示字符串

%u  无符号整数

%% ;显示%自身

awk -F: '{printf "username:%s,uid:%d\n",$1,$3}' /etc/passwd

修饰符: #[.#]  :  第一个数字控制显示的宽度,第二个表示小数点的

awk -F: '{printf "username:%15s, uid:%15d\n",$1,$3}' /etc/passwd   实现对齐  -15 表示左对齐

操作符:

  算术操作符: +   -  *   /   ^   %

  赋值操作符 : =   +=   -=   ++   --

  比较操作符: <   >   <=   >=   !=   ==

  逻辑操作符:&&   ||    !

  函数调用:name(参数,canshu2)

匹配条件:

    /regular/ :仅处理能够被匹配到的行: awk   ‘/^UUID/{print $1}’   /etc/fstab

    relational:关系表达式结果为真才处理,真:结果为非0值

    

awk –F:  ‘$3>=1000{print $1,$3}’   /etc/psswd

awk  -F:  ‘$NF==”/bin/bash” {print $1,$NF}’   /etc/passwd

line  ranges :行范围  开始行 ,结束行

awk  -F:  ‘(NR>=2&&NR<=10){print $1}’  /etc/paswwd

1 if—else 语法

格式  if(条件) statement  else statment

[root@localhost ~]# awk -F: '{if($3>100) print $1,$3}' /etc/passwd

uid 大于1000的显示为普通用户,否则显示root或系统用户

awk -F: '{if($3>=1000) {printf "connes user:%s id:%d\n", $1,$3} else {printf "root or sys:%s id:%d\n",$1,$3}}' /etc/passwd

$NF  表示最后一个字段    NF 是一行字段数

awk -F: '{if($NF == "/sbin/nologin") print $1}' /etc/passwd

]# df -h |awk -F'%' '/^\/dev/ {print $1}'

2 while 语句

while(条件) statement

使用场景;对一行中多个字段逐一处理时  或对数组中多个元素逐一处理

awk '/^[[:space:]]*kernel/ {print}' /etc/grub.conf

awk '/^[[:space:]]*kernel/{i=1; while(i<=NF) {print $i,length($i); i++}}' /etc/grub.conf

awk '/^[[:space:]]*kernel/{i=1; while(i<=NF) {if(length($i)>7) {print $i,length($i)}; i++}}' /etc/grub.conf

for 语句

for(export1;export2;export3) statement

]# awk '/^[[:space:]]*kernel/ {for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub.conf

遍历数组中元素:  for(var  in  arry) statement

switch语句case

break  和continue  语句

next语句,提前结束直接进入下一行

[root@localhost ~]# awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd

数组: week[mon]=”monday”    关联数组

# awk 'BEGIN{week["mon"]="monday";week["tu"]="tusday";week["we"]="weekday";for(i in week) {print week[i]}}'

]# awk 'BEGIN{week["mon"]="monday";week["tu"]="tusday";week["we"]="weekday"; print week["mon"]}'

函数:

内置函数:

rand() :返回0和1之间任意数

length():返回指定字符串长度

sub(r,s,[t]) 以r模式来查找t字符串中匹配的内容,并将第一次出现替换为s多表达的内容

awk  -F: ‘{print sub(o,O, $1)}’   /etc/passwd

自定义函数:

]# netstat -tan | awk '/^tcp\>/ {print $0}'

awk介绍的更多相关文章

  1. AWK 介绍

    一.模式和动作 awk脚本是由模式和操作组成的:pattern {action} pattern与{action}两者是可选的.如果没有模式,则action应用到全部记录,如果没有action,则输出 ...

  2. Shell 学习—AWK介绍

    Shell 学习—AWK = = = 安装awk root@kiki-desktop:~/shell# apt-get install gawk gawk-doc = = = awk 是一种程序语言. ...

  3. shell编程awk基础介绍

    awk介绍 报告生成器,格式化文本输出 处理机制类似sed命令,自带循环处理    读入一行处理一行然后自动读取下一行再进行处理 sed命令换行的标识是固定的,只能是回车换行.    awk里面的换行 ...

  4. AWK的介绍学习

    第一节.awk的工作流程和基本用法 1.awk介绍 awk是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件内容进行各种"排版",进而格式化 ...

  5. 『忘了再学』Shell基础 — 27、AWK编程的介绍和基本使用

    目录 1.AWK介绍 (1)AWK概述 (2)printf格式化输出 (3)printf命令说明 2.AWK的基本使用 (1)AWK命令说明 (2)AWK命令使用 1.AWK介绍 (1)AWK概述 A ...

  6. 【译】 AWK教程指南 1前言

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  7. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  8. 正则表达式、find、grep、awk、sed

    1.正则表达式    (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.   (2)基本元字符集及其含义       ^ :只 ...

  9. awk进阶整理

    BEGIN{写在前言,我英语不好,有许多地方直接使用的谷歌翻译.为了能理清awk工具使用的思路,详情还要看awk说明书(man awk) 或者http://www.gnu.org/software/g ...

随机推荐

  1. LabVIEW---vi图标和符号的制作

    前言: 使用图形化设计语言进行开发时候,为VI添加说明的一个重要的方法是为其建立一个形象的图标,每个VI都在前面板后程序框图的右上角有一个图标,它是VI的图形化表示.如果VI当作子VI调用,该图标就会 ...

  2. Day8--------------源码安装

    yun install python 在yum源中 wget 地址 下载 下载---------->解包-------->运行config脚本添加编译参数--------->编译(g ...

  3. 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]

    洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...

  4. WebRequest使用(车)

    // 待请求的地址 string url = "http://www.cnblogs.com"; // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求 ...

  5. swift 学习- 11 -- 属性

    // '属性'将值跟特定的类, 结构体或枚举关联, 存储属性常量或变量作为实例的一部分,而计算属性计算(不是存储) 一个值, 计算属性可以用于 类, 结构体, 枚举, 存储属性只能用于 类 和 结构体 ...

  6. Confluence 6 指定日志选项和已知问题

    指定 Confluence 日志选项 这里是一些特定的日志配置,你可能在对问题进行调试的时候需要. 在日志中记录数据库使用的 SQL 查询请求 你可能希望增加日志的中的内容,记录 Confluence ...

  7. Confluence 6 从一个备份中获得文件附件

    页面中的文件附件可以从备份中获得而不需要将备份文件导入到 Confluence 中.这个在用户删掉了附件,但是你还是想恢复这个附件的时候就变得非常有用了. 自动备份和手动备份都允许你进行这个操作,但是 ...

  8. UserNotifications ios10 通知使用

    通知在ios10 中推荐使用 导入  import UserNotifications  头文件 if #available(iOS 10.0, *) { UNUserNotificationCent ...

  9. Meta标签详解

    [转载]Meta标签详解 Posted on 2005-05-17 20:00 二十四画生 阅读(54195) 评论(102)  编辑 收藏 Meta标签详解,在网上转的,希望对大家有用 引言 您的个 ...

  10. LeetCode(71):简化路径

    Medium! 题目描述: 给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如,path = "/home/", => "/home&quo ...