在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要

下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件:

在awk中:()括号为条件块,{}为执行的命令块

一般情况下awk有这几部分组成:

awk 'BEGIN{}(){}END{}' file

BEGIN为初始化操作,中间为对file文件中每一行的处理,END块中为最后的输出

当然,awk不是必须这3个都有,也不是缺少谁就不行的。可以只有BEGIN,也可以只有END

print命令
打印文件内容
awk '{print}' datafile

-f参数
执行awk脚本,如脚本为hello.awk
awk -f hello.awk datafile

$number
表示记录的字段,其中$0表示整个串

FS
表示字段分隔符,如下以逗号作为分隔符
awk 'BEGIN{FS=","}{print}' datafile
当写脚本文件时,一般用FS

-F参数
同FS作用一样,设置分隔符,如
awk -F "," '{print $1}' datafile

NF
表示当前记录行中的字段数量

NR
表示当前记录的编号,即行号

FNR
当前浏览文件的记录数

FS="\t+"
表示以一个或多个制表符作为分隔符

OFS
字符分隔符,俩个字段间插入分隔符

RS
记录分隔符,即一行的分隔符

ORS
输出记录分隔符,俩个记录间(行)插入

OFMT 数的输出格式

CONVFMT 数值的内部转换格式

布尔表达式
awk -F "," '$1=="Hello" {print $1}' datafile
只有第一个参数值为Hello时,才打印第二个

length(string1)
返回string1长度

index(string1,string2)
返回string2在string1中的位置,没有返回0

tolower(string1)/toupper(string1)
返回大小写

substr(string1,5,3)
从string1的第5位置开始截取长度为3的字段

match(string1,/you/),RSTART,RLENGTH
match匹配的是一个正则表达式
RSTART返回第一个匹配的位置
RLENGTH指定他占据的字符跨度,没有为-1

gsub/sub(/My/,"You",string1)
gsub全局替换,sub只替换第一个
如上为在string1中查找My并替换为You

split(string1,strarray,",")
print strarray[1],strarray[numelements]
把string1以逗号分割,并传入到strarray组中
从1开始编号

删除重复行(必须先排序)
sort  datafile|awk '{if($0!=line)print;line=$0}'

FILENAME
awk中特殊存在,用于表示文件
awk 'END{print FILENAME}' datafile
打印file名字
若有多个输入文件则可以用于判断,如:
awk 'if(FILENAME=="file1"){arr[$3]=$1}else{($1 in arr){print arr[$1]"|"$2}} file1 file2
注意:awk先处理前面文件再处理后面文件

ARGIND
当前被处理参数标记

ARGC
命令行参数个数

ARGV
命令行参数排列

ENVIRON
支持队列中环境变量的使用

next
下一个命令不执行
awk '(NR%2=1){next}{print}' f1
awk 'NR==FNR{a[$0]=$0;next}a[$0]{print a[$0],$0}

nextfile
中断当前文件处理,进入下个文件处理:
awk '{print FILENAME;nextfile} f1 f2
打印俩个文件名,多用于查找文件

exit
停止awk,并执行END语句块后退出

定义函数:
awk '{print "sum=",sqrtsum($1,$2)}function sqrtsum(x,y){return x*x+y*y}' file
awk '{print "sum=",$1*$1+$2*$2}

-v
加载环境或shell中的参数
awk-F \| -v ORAHOME=${ORA_HOME} '{print $1"|"ORAHOME>"datafile1"} datafile
或者如下:
awk-F \|  '{print $1"|"ORAHOME>"datafile1"} ORAHOME=${ORA_HOME} datafile

注:若在BEGIN中使用环境变量,则必须使用-v模式

getline
获取文件的行内容,一般放在BEGIN中
一个getline获取一行,也可以保存到变量
awk 'BEGIN{getline var1}END{print var1}' file

打印5行之后的行:
awk 'NR>5' file
打印2到6行:
awk 'NR==2,NR==6' file
打印前5行:
awk '!(NR>5)' file
awk 'NR<6' file
打印5倍数的行:
awk '(NR%5==0){print}' file
awk '!(NR%5){print}' file

awk中相关操作符使用

~操作符
俩边匹配符,可模糊比较,如:
awk 'BEGIN{FS="|"}($2~/..My./){print}' file

表示在第二个字段中包含5个字符,其中第3、4个字符为My的行

比较运算符
==俩边相等
>
>=
<
<=
!=俩边不等
~ 匹配正则表达式
!~ 不匹配正则表达式
‖逻辑或
&& 逻辑与

算术运算符
+      加法
-       减法
*      乘法
/      除法
^     指数算法
%    模算法
--     自-1(前后自减)
++   自+1(前后自加)
+=    自加算法
-=      自减算法
*=      自乘算法
/=      自除算法
^=     自指数算法
%=    自模算法

统计文本中空行数量
awk 'BEGIN{x=0}/^$/{x+=1}END{print x}' datafile
/^$/表示空行

正则表达式:
\      转义符
^      行首符
$      行尾符
.        匹配一个字符
[ ]      匹配其中一个字符
|        或操作
( )     判断语句
*       匹配0个或多个前面的字符
+      匹配前面一个或多个字符
?      匹配模式出现频率

if语句
if($1=="foo"){
    print "foo"
}else if($1=="bar"){
    print "bar"
}else{
    print "other"
}

do..while语句
{
count=6
do{
     print count
     count--
    }while(count!=1)
}

while语句
{
while(x<NF){
     print $x
     x++
   }
}

for语句
for(x=1;x<=5;x++){
    print x
}

linux中awk的使用的更多相关文章

  1. Linux中awk后面的RS, ORS, FS, OFS 用法

    Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪   我们经常会说,awk是基于行列操作文本的,但如何定义“行”呢?这就是RS的作用.  默认情况下,RS的 ...

  2. [转帖]Linux中awk工具的使用

    Linux中awk工具的使用 2018年10月09日 17:26:20 谢公子 阅读数 2170更多 分类专栏: linux系统安全   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...

  3. linux中awk命令(最全面秒懂)

    目录 一:linux中awk命令 1.awk命令简介 2.awk作用 3.awk的语法格式 4.解析awk使用方法 5.参数 6.awk的生命周期 二:awk中的预定义变量 三:awk运行处理规则的执 ...

  4. linux中awk命令详解(最全面秒懂)

    一:linux中awk命令 1.awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinber ...

  5. linux中awk工具的使用(转)

    add by zhj: awk很强大,它是一个简单的编程语言,国外有本专门的书介绍它的用法.<effective awk programming>,它支持整型,字符串型,数组,变量在使用前 ...

  6. linux中awk 详解

    一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报表生 ...

  7. linux中awk命令学习

    awk是一个强大的文本分析工具,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 通常获取某一行时,我们会使用 “grep 关键字“进行查找,但在读取某一列时, ...

  8. Linux中awk的用法

    一.awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...

  9. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

随机推荐

  1. php RSA非对称加密 的实现

    基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...

  2. Yii 框架不同逻辑处理方法统一事务处理

    1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...

  3. 丑数(python)

    题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数.   # ...

  4. C++内存空间

  5. 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理

    前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...

  6. 项目总结19:layui实现表格渲染、表格搜索、数据获取

    项目总结19:layui实现表格渲染.表格搜索.数据获取 1-参考资料:https://www.layui.com/demo/table/reload.html 2-本次总结的是layui的表格功能, ...

  7. node.js中process进程的概念和child_process子进程模块的使用

    进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...

  8. Eigen子矩阵操作

    1 子矩阵操作简介 子矩阵操作又称块操作,在矩阵运算中,子矩阵的提取和操作应用也十分广泛.因此Eigen中也提供了相关操作的方法.提取的子矩阵在操作过程中既可以用作左值也可以用作右值. 2 块操作的一 ...

  9. 粒子动画——Pygame

    你是否也想做出下图这么漂亮的动态效果?想的话就跟着我一起做吧=.= 工具: Python--Pygame 仔细观察上图,你能发现哪些机制呢?再在下面对比一下是否跟你想的一样. 运行机制: 1.随机方向 ...

  10. Codeforces Round #546 (Div. 2) E 推公式 + 线段树

    https://codeforces.com/contest/1136/problem/E 题意 给你一个有n个数字的a数组,一个有n-1个数字的k数组,两种操作: 1.将a[i]+x,假如a[i]+ ...