awk是啥?

  awk(奥克)是linux中一个强大的分析工具,linux面试必考

[root@rainbol ~]# awk
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version. gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output. Examples:
gawk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' /etc/passwd

普通打印

awk '{print}' access.log       #打印所有列  或者 $0
awk '{print $1}' access.log #打印第一列
awk '{print $1,$4}' access.log #打印第一列第四列,注意中间用英文逗号分隔
awk '{print $1,"\t",$4}' access.log #\t表示在每一列使用制表符之间对齐,方便查看格式
awk '{print $1 $4}' access.log  #如果不加逗号或者加入空格,awk做拼接操作,$1和$4就拼接在一起,所以','为awk默认分隔符,其代表一个空格

  #

行列号打印  NR(number of record)  NF(field of record)

awk '{print NR "\t" $1,"\t",$4}' access.log    #在第一列插入行号
awk '{print NF "\t" $1,"\t",$4}' access.log #在第一列插入该行的所有列(注意: awk默认是以空格计算间隔的列)
awk '{print $NF}' access.log   #打印最后一列的内容
awk '{print $(NF-1)}' access.log   #打印最后第二列的内容

  

逻辑判断式

awk '$1!="192.168.1.1" {print $1 ,$4}' access.log    #打印第一列中没有192.168.1.1的ip号,注意不加引号默认为数字判断
awk 'NF!=2 {print $0}' access.log    #打印中NF中不是2段的数据

自定义分割符

#输入分割符
awk 'BEGIN{FS=","}{print $1,$2}' access.log #将默认空格分割符变为默认','分割符,使得遇到','自动分割
#输出分割符
awk 'BEGIN{OFS=","}{print $1,$2}' access.log #将输出的默认空格分割符变为','
awk 'BEGIN{FS=",";OFS=","}{print $1,$2}' access.log    #将输出的默认空格分割符变为','

多文件拼接

awk '{print $0}' a.txt b.txt  ...  #多文件拼接直接在文件后面加文件就行了

awk '{print FIRENAME,$0}'  a.txt   #FIRENAME加入一列文件名,方便查看文件

awk '$1="**.**.**.**"{print $0}' access.log    #如果不想要别人看到某一列的内容并替换为其他可以这么写

甚至还可以计算

[root@rainbol logs]# awk '{a=1;b=3;print a+b}'

4
#但注意如果字符串中数字和其他字符拼接在一起,如:a = 'aa123',b不变,那么结果为3,如果a='123aa',b不变,结果为126

awk正则表达式

/abc/
#可以
"abcxx"
"xxxabcxxx"

#不可以
"axxbxxc"
"ab c"
只要abc连续都配置 awk '/abc/{print$0}' a.txt  #按行搜索只有符合正则的行都打印出来
/a.c/
#可以
"abc"
"a c" #不可以
"acb"
"ac"
"aaacc" .表示任意字符,注意是一个,如果用两个那就是/a..c/,如果就是想匹配a.c怎么办,使用转义字符/a\.c/
/^abc/
#可以
"abcsad" #不可以
"aabc" ^表示匹配字符串开头的,abc要出现在最前面才行
$与其正好相反,/abc$/表示abc要出现在最后面才行
/a[]c/
#可以
"a1c"
"a2c"
"a3c"
#不可以
"abc"
"a11c"
括号表示a和c中间必须包括1,,3中间的任意一个就行了
当还可以这样/a[a-z]c/ /a[-]c/ /a[A-Z]c/ /a[a-zA-Z0-]/  
/a[^a-z]c/  #在方括号中出现^表示非,也就是不能出现a-z的字母  所以"abc"是错的
/a*c/
#可以
"aaaaaac"
"c"
#不可以
"ccca"
# *表示匹配0个或者多个a,匹配为*号前面的一个字符 /a+c/
#可以
"ac"
"aaaaac"
#不可以
"c"
# +表示匹配1个或者多个a,匹配为+号其那面的一个字符 /a?c/
#可以
"c"
"ac"
#不可以
"aaaac"
# ?表示匹配0个或者1个a,匹配为?号前面的一个字符
/ab{}c/
#可以
"abbbc"
#不可以
"abc"
"abbc" #{}表示匹配次数,{}表示前面一个字符必须要出现3次才能匹配,多也不行少也不行   /ab{3,5}/  #逗号表示 到..之间都可以,可以出现3次或者出现4次或者出现5次,并且包括3和5   /ab{3,}c/  #出现包括3个b,后面多少b都无所谓
/(ab)+c/
#可以
"abc"
"ababc"
#不可以
"abbc" # ()小括号表示在括号内看做一个整体,小括号后面可以接匹配规则

其他

  猛击这里

awk命令笔记的更多相关文章

  1. awk命令分析日志的简单笔记

    awk是一个文本分析工具,可以用来进行流量日志分析 之前无意中看到了这个命令,简单记一下笔记 ,在打线下的时候可能会有用 awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gaw ...

  2. awk 学习笔记

    awk的语法有两种形式 awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) 选 ...

  3. awk命令

    awk 手册   原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...

  4. (转)awk命令

    转自:http://man.lupaworld.com/content/manage/ringkee/awk.htm#id2874788 整理:Jims of 肥肥世家 <jims.yang@g ...

  5. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  6. linux awk学习笔记

    awk学习笔记 awk语法格式 awk '{pattern + action}' {filenames} awk作用 awk的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后 ...

  7. AWK命令使用

    前言 文本处理三剑客中,grep强在文本查找,sed强在文本处理,现awk强在文本查找后的输出处理.awk可以在处理文本的过程中使用编程结构(变量.条件判断.循环)以及其内置的变量,这就是它强大的地方 ...

  8. 【转】awk学习笔记

    Awk学习笔记 整理:Jims of 肥肥世家 <jims.yang@gmail.com> Copyright © 2004 本文遵从GPL协议,欢迎转载.修改.散布. 第一次发布时间:2 ...

  9. 使用 awk 命令统计文本

    2022-04-19 11:25:15.008,b4d13bfca8fe4b93a85e65a88520d945,LogScheduler#printLog,10ms,Y,xxxxxxxx 2022- ...

随机推荐

  1. Spring boot后台搭建二集成Shiro添加Remember Me

    上一片文章实现了用户验证  查看 当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效 Shiro提供了R ...

  2. Java语言中null与" "的区别

    null是空对象,没有地址,可以赋值给任何对象:""是空字符串,有地址但是里面的内容是空的,只能赋值给字符串对象. 如:String s;//分配了一个内存空间,没存入任何对象   ...

  3. 09 Spring的依赖注入

    1.依赖注入(Dependency Injection) (1)IOC的作用: 降低程序间的耦合(依赖关系)(2)依赖关系的管理: 以后都交给spring来维护 在当前类需要用到其他类的对象,由spr ...

  4. Linux下的JMeter部署及使用

    之前都是在windows环境使用JMeter,是有操作界面的.但是最近需要在Linux环境下使用,现将操作步骤记录下来 在安装JMeter之前,需要在Linux下安装JDK并配置环境变量,这里跳过 1 ...

  5. BZOJ3791 作业(DP)

    题意: 给出一个长度为n的01序列: 你可以进行K次操作,操作有两种: 1.将一个区间的所有1作业写对,并且将0作业写错: 2.将一个区间的所有0作业写对,并且将1作业写错: 求K次操作后最多写对了多 ...

  6. LeetCode第151场周赛(Java)

    这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...

  7. proxy_banner

  8. 集成maven和Spring boot的profile

    如果在配置中勾选了多套配置,则以pom.xml文件中 profiles中  配置 最后一个配置为准. maven中配置profile节点: <project> .... <profi ...

  9. Springboot 整合ApachShiro完成登录验证和权限管理

    1.前言 做一个系统最大的问题就是安全问题以及权限的问题,如何正确的选择一个安全框架对自己的系统进行保护,这方面常用的框架有SpringSecurity,但考虑到它的庞大和复杂,大多数公司还是会选择 ...

  10. Unity的学习笔记(XLua的初学用法并在lua中使用unity周期函数)

    自己最近也在研究怎么用lua控制UI,然后看着网上介绍,决定选用XLua,毕竟TX爸爸出的,有人维护,自己琢磨着怎么用,于是弄出来一个能用的作为记录. 当然,XLua主要是用于热更新,我自己是拿来尝试 ...