awk

awk

显示例子

显示行的所有内容 $0

awk '{print $0}' /etc/passwd    

显示hello world (前面的金额echo 控制了 输出1行 与内容无关)

echo asdf |awk '{print "hello world"}'  

显示多行hello world (文件内有几行 就显示几行hello world 文件控制了输出的行数)

awk '{print "hello world !"}' /etc/passwd 

使用分隔符

awk 'BEGIN{FS=":"}{print "$7"}' /etc/passwd

使用分隔符(功能一样)

awk -F":" '{print $7}' /etc/passwd 

使用制表符和字符串

awk -F":" '{print "username: "$1",\t UID:"$3}' /etc/passwd

BEGIN块和END块

通常,对于每个输入行,awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,
可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk 允许
您定义一个 BEGIN 块。我们在前一个示例中使用了 BEGIN 块。因为 awk 在开始处理输入文
件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它
在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。awk 在处理了输入文件中的所有行之后执行
这个块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。

运算符

image

运算符 && BENGIN_END 例子

算数运算符

free -m|awk 'NR==2{printf "%5.2f%\n",$3*100/$2}'
UTOOLS1573718415653.png

(a+=5) == (a=a+5)

awk 'BEGIN{a=5}{print a+=5}' #10

逻辑运算符

awk 'BEGIN{a=1;b=2;print (a<b&&a==1)}'

正则运算符

awk 'BEGIN{a="100testaaa";if(a~/100/){print "has 100"}}'

算数运算符

说明,所有用作算术运算符 进行操作,操作数自动转为数值,所有非数值都变为 0

awk 'BEGIN{a="B";printa++,++a}' #0 2
awk 'BEGIN{a="11abc";print a+=1}' #12

三目运算符

awk 'BEGIN{a="B";print a=="B"?"a is B":"a not B"}' #a is B

常用awk 内置变量

变量名 属性
$0 当前记录(当前行)
1-n 字段序号(分隔符做出的分隔是一个字段)
FS 输入字段的分隔符 一般在BEGIN块里 ,也可以使用 awk -F"" 指定分隔符
RS 输入记录的分隔符 ,默认是回车
NF 当前记录的字段个数 就是有多少列
NR 已经读出的记录数目 也就是行号 从1开始
FNR 针对两个文件,显示两个文件时,将2个文件的行号分开
OFS 输出字段分隔符 默认是 空格
ORS 输出记录的分隔符, 默认是 换行符
-v 引用awk内部变量 例如在''外部指定 OFS

内置变量例子

查找oldboy运行的程序并结束

ps -ef|awk '$1=="oldboy"{print $2}'|xargs kill -9

指定分隔符FS

awk 'BEGIN{FS=":"}{print $1,$2,$3}'  /etc/passwd    #指定分隔符为 : ,然后读取列
awk 'BEGIN{FS="[[:space:]+]"}{print $1,$2,$3}' /etc/passwd  #分隔符为一个或多个 空格

记录数量NR

ifconfig eth0|awk 'NR==2{print $2}' #IP地址

字段数量NF

awk 'BEGIN{FS=":"}{print NF}' /etc/passwd #查看一个字段有几列 (之前用FS 制定了字段分隔符)
awk -F ":" 'NF==8{print $0}' /etc/passwd #当一个字段有8列的时候输出整行

记录分隔符RS

awk 'BEGIN{RS=":"}{print}' /etc/passwd #把所有:替换成回车

指定字段分隔符OFS

awk 'BEGIN {FS=":";OFS="#"}{print $1,$2,$3}' /etc/passwd
#输出
    root#x#0
    bin#x#1
    daemon#x#2
    adm#x#3
    lp#x#4
    sync#x#5
    shutdown#x#6

指定记录分隔符ORS

awk 'BEGIN{ORS="\t"}{print}' /etc/passwd    #把默认的回车替换成了制表符

外部引用内部变量

awk -F -vOFS=":" ‘{print $7,$2,$3,$4,$5,$6,$1}’ /etc/passwd

awk正则表达式

image

正则应用

规则表达式

awk '/REG/{action}' filename #REG是正则表达式 可以将$0中 满足条件的记录送到:action中处理

正则表达式例子

在记录中搜索一个字段

awk '/root/{print }' /etc/passwd    #搜索*root* 在记录中

输出第5条记录中包含root的字段

awk -F: '$5~/root/{print }' /etc/passwd

布尔表达式

awk 'bool{action}' filename // bool?action:pass

awk 'BEGIN{FS=":"}$1=="root"{print }' /etc/passwd   #如果 第一个字段是 root 则输出

比较表达式

awk '$3>30' /etc/passwd

复合用法

awk -F: '$1=="root"||$4==0{print}' /etc/passwd

if && 循环 && 数组

if

awk -F: '{if{$3==0}{print $1}}' /etc/passwd

awk 提供的非常类似C语言的if语句

image

使用awk检测每个类型的用户有几个

UTOOLS1573721903500.png

使用awk 批量删除 用户

UTOOLS1573722681804.png
UTOOLS1573722695685.png

创建不同日期的文件

UTOOLS1573723270509.png
UTOOLS1573723336028.png

循环

awk的while循环结构 等同于 C语言的 while 循环 . awk 还设有 do while 结构

while 循环

while   #想要执行代码就先要满足while条件
do while #无论满不满足 , 第一次的 do 都是可以执行的


continue    #跳过此次循环 执行下次循环
break       #跳出所有循环 直接结束循环

例子

image

for 循环

for 循环需要三个参数
for(初始化条件[执行一次];判断条件[执行循环的次数];判断成功后执行的语句[执行循环的次数])

执行顺序: 1,2,3,{},2,3,{},2,3,{},2,3,{}....[直到不满足条件2,跳出循环 执行{}下面的代码]

例子

image

(一共循环0~99 ,100次循环)

数组array

awk中的数组都是关联数组,数字索引也会转变为字符串索引

{
     cities[1] ="beijing"
     cities[2] ="shanghai"
     cities["three"] ="guangzhou" 
     for(city in cities){
         print city
     }
 #exit
 }

for..in 输出,因为数字是关联属组,默认是无序的,所以通过 下标取得有序属组

取出 TCP 11种状态各有几个

UTOOLS1573724118335.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Linux指令中文说明传送入口 整理自Linux指令中文说明 文本和数据进行处理的编程语言awk 是一种编程语言,...
    释闲人阅读 2,105评论 1 6
  • awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多...
    yeahuh阅读 3,938评论 0 7
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,549评论 0 4
  • 本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,...
    mylxsw阅读 1,174评论 0 12
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,451评论 0 9