AWK(一)

本章内容:awk介绍;awk基本用法;awk变量;awk格式化;awk操作符;awk条件判断;awk循环;awk数组;awk函数;调用系统命令

1:AWK介绍

(一)awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 
有多种版本:New awk(nawk),GNU awk( gawk) 
gawk:模式扫描和处理语言 
基本用法: awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’ file …
awk 程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块 、END语句块,共3部分组成       program通常是被单引号或双引号中
选项:
-F 指明输入时用到的字段分隔符
-v var=value: 自定义变量
  AWK语言
(1)基本格式:awk [options] ‘program’ file…
(2)program:pattern{action statements;..}
(3)pattern和action:
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明
print, printf
(4)分割符、域和记录
awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称为域标识。$0为所有域,注意:和shell中变量$符含义不同
文件的每一行称为记录
省略action,则默认执行 print $0 的操作
 AWK工作原理
第一步:执行BEGIN{action;… }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

2:AWK基本用法

print格式: print item1, item2, …

要点:

(1) 逗号分隔符

(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式

(3) 如省略item,相当于print $0

示例

awk ‘{print “hello,awk”}’

AWK(一)

awk –F”:”  ‘{print}’ /etc/passwd

1

awk –F: ‘{print $1}’ /etc/passwd

2

awk –F: ‘{print $0}’ /etc/passwd

3

awk –F: ‘{print $1”\t”$3}’ /etc/passwd

AWK(一)

tail –3 /etc/fstab |awk ‘{print $2,$4}’

AWK(一)

3:AWK变量

变量:内置和自定义变量

FS:输入字段分隔符,默认为空白字符
awk -v FS=’:’ ‘{print $1,FS,$3}’ /etc/passwd

AWK(一)
awk –F: ‘{print $1,$3,$7}’ /etc/passwd

AWK(一)

OFS:输出字段分隔符,默认为空白字符

awk -v FS=‘:’ -v OFS=‘:’ ‘{print $1,$3,$7}’ /etc/passwd

AWK(一)

RS:输入记录分隔符,指定输入时的换行符
awk -v RS=’ ‘ ‘{print }’ /etc/passwd

AWK(一)

ORS:输出记录分隔符,输出时用指定符号代替换行
awk -v RS=’ ‘ -v ORS=’###’‘{print }’ /etc/passwd

AWK(一)

NF:字段数量
awk -F: ‘{print NF}’ /etc/passwd,引用内置变量不用$

AWK(一)
awk -F: ‘{print $(NF-1)}’ /etc/passwd

AWK(一)0

NR:记录号
awk ‘{print NR}’ /etc/fstab

AWK(一)

 

FNR:各文件分别计数,记录号
awk ‘{print FNR}’ /etc/fstab /etc/inittab

AWK(一)

FILENAME:当前文件名
awk ‘{print FILENAME,NR,$0}’ /etc/fstab

AWK(一)0

ARGC:命令行参数的个数
awk ‘{print ARGC}’ /etc/fstab /etc/inittab

AWK(一)0
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab

AWK(一)

ARGV:数组,保存的是命令行所给定的各参数
awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab

AWK(一)

代表第一个参数

awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab

AWK(一)

代表第二个参数

自定义变量(区分字符大小写)
(1) -v var=value
(2) 在program中直接定义

示例:
awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab

AWK(一)

awk -v test=’hello gawk’  ‘BEGIN{print test, “is haha” }’

AWK(一)0

awk –F:‘{sex=“male”;print $1,sex,age;age=18}’ /etc/passwd

AWK(一)

调用文件

{sex=”male”;print $1,sex,age;age=18}

awk -F: -f abc.txt /etc/passwd

AWK(一)0

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90758

(0)
上一篇 2018-01-01 20:27
下一篇 2018-01-01 20:46

相关推荐

  • linux中特殊符号用法

    1 #    #  管理员账户    $  普通账户   在脚本中 #也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后边是注解文字,不会被执行 例如     #!/bin/bash     #th…

    Linux干货 2016-08-15
  • 用户权限过滤练习(w4)

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。 [root@keyou ~]# cp -r /etc/skel/ /home/tuser1 | chmod -R g-rwx,o-rw…

    系统运维 2016-11-20
  • Linux Sysadmin–part1

    一、创建一个10G分区,并格式为ext4文件系统; 1、要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl; 2、挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; ###创建10G分区 ~]# fdisk /dev/sdb Command (m for help): n P…

    2017-09-04
  • 用户及权限管理

    新建用户用到的相关文件/etc/default/useradd /etc/login.defs /etc/skel/* 批量创建用户1.创建用户列表user.txt(文件格式同/etc/passwd) 2.newusers user.txt 3.创建密码文件passwd.txt(格式  用户名:密码) 4.cat passwd.txt | chpa…

    Linux干货 2016-08-11
  • 性能调优概述

    大纲: 一、概述 二、什么是性能调优?(what) 三、为什么需要性能调优?(why) 四、什么时候需要性能调优?(when) 五、什么地方需要性能调优?(where) 六、什么人来进行性能调优?(who) 七、怎么样进行性能调优?(How) 八、总结 注,硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作…

    Linux干货 2015-02-10
  • CentOS7口令破解

    一.rd.break方式修改  1.启动时任意键暂停启动      2.按e 键进入编辑模式 将光标移动linux16 开始的行,添加内核参数rd.break 按ctrl-x 启动 3.重新挂载可读可写根目录 :mount –o remount,rw /sysroot 切回根目录: chroot /sysroot 修改…

    Linux干货 2016-11-29