awkwardness awk

awk 命令 AWK
command读前处理行处理读后处理
1、读前处理:BEGIN{awk_cmd1;awk_cmd2}
2、行处理:定址命令
定址方法:正则、变量、比较和关系运算
正则需要用//包围起来
awk-F: '/root/{print}'gad
awk-F: '$1~/root/{print}' gad第一列匹配
awk-F: '$1~/root/{print}' gad第一列匹配,锁定字符串匹配
awk-F: '$1!~/root/{print}'gad
. 除了换行符以外的任意单个字符
[] 字符组内的任一字符
[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
[ ] 非字符组内的字符开头的行
3、读后处理END{awk_cmd1;awk_cmd2}
awk -F "" '{for(i=1;i=NF;i++) print $i}'gad.txt逐字换行
NF代表每行的元素个数
NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)
FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)
1 1 AAAA
2 2 aaaa
3 3 a
4 1 bb
5 2 bbbbbbbb
赋值 = ++ -- +=。。。
【awkwardness awk】awk'BEGIN{a=1;print a++;print a}' 先执行命令然后a+1
||逻辑或逻辑与!取反
匹配正则或不匹配,正则需要用/正则/ 包围住
~!~
关系比较字符串时要把字符串用双引号引起来
== != ==
转义序列
\ \自身$ 转义$\t 制表符\b 退格符\r 回车符\n 换行符\c 取消换行
-v可以借用此方式从shell变量中引入
a=root
awk -v var=$a -F':' '$1==var{print $1}' passwd
a= whoami; awk -v var=$a -F':' '$1==var{print $3,$6}' /etc/passwd
FS 定义字段分隔符,默认为一个空格
OFS 输出的字段分隔符,默认为一个空格
root-0-root
bin-1-bin
root@@0##root
bin@@1##bin
RS 记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ RS=":"}{print}' 把:号换成了换行符
ORS 输出的记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ ORS="-"}{print}' 把换行符换成了 - 号
FILENAME 文件名
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 输出系统环境变量
root

awkwardness awk

文章插图
awk的用法awk 'pattern {action}' file
awk:指令名称
pattern:过滤器
action:动作
pattern是过滤器,在逐行处理的过程中,可以使用过滤器过滤掉不需要的行,或者过滤出需要的行 。而过滤器可以有以下几种方式:
使用正则表达式来过滤,将要过滤的内容放在 / /中 。
比如,过滤包含hello行:
==(相等)、 ~ (包含)、! ~ (不包含)、(且)、||(或)
示例:
test.txt内容如下:
过滤第一个字段等于“hello”的行
过滤出第一个字段包含“hello”的行
过滤出第一个字段不包含“hello”的行
过滤出包含“hello”且包含“world”的行
过滤出包含“hello”或者包含“meituan”的行
由两个pattern组成,begpat和endpat,中间使用逗号(,)分割,begpat表示匹配的开始位置,endpat表示匹配的结束位置
示例
test1.txt内容如下:
过滤出第一个字段是“hello” 到 “baidu”的行
使用语法是 awk 'BEGIN{}{}END{action}',指定 initialization 和 cleanup 规则 。
示例
test2.txt内容如下:
求最大值
类似2.4,只不过是规则更复杂
匹配所有行,不过滤任何内容
test.txt内容如下:
打印test.txt的内容
FS:分隔符,默认空格
NR:当前行
NF:当前记录字段个数
$0:当前记录
$0~n:当前记录中的第n个字段
示例
test3.txt内容:
打印每行每个字段用#连接起来
打印第2 ~ 第5行的内容
打印第2 ~ 第5行的内容最后一个字段
gsub(s,r): 在$0中,使用r代替s
index(s,t): 返回s中t的第一个位置
length(s) :s的长度
match(s,r) :s是否匹配r
substr(s,p) :返回s中从p开始的子串
awk命令详解是什么?awk:用于一行中分成数个“字段”来处理 。适合处理 小型数据 。
运行模式:awk '条件类型1{动作1} 条件类型2{动作2} ...' filename 。
# last | awk '{print $1 "\t" $3}' == 查看登录者的数据,只显示登录名和ip地址,并以[tab]隔开
awk 的内置变量 。
变量名称 代表的含义
NF 每一行($0)拥有的字段总数
NR 当前 awk 所处理的是 “第几行” 数据
FS 当前分隔符,默认空格键
awk 的逻辑运算符
特点
AWK是一种优良的文本处理工具 。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一 。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识 。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数 。

秒懂生活扩展阅读