资讯专栏INFORMATION COLUMN

linux awk命令

qujian / 2683人阅读

摘要:前言最近复习了下,记录方便下次查阅一变量内置常用变量当前记录,当前行所有列当前记录的第个字段,字段间由分隔输入域分隔符,等价于命令行,默认为空格当前记录中的字段个数,就是有多少列,列总数,则表示最后一列已经读取的记录数,就是第几行,从开始

前言:
最近复习了下awk,记录方便下次查阅

echo "11 22" | awk "{print $1}"
echo |awk "{print "hello world!"}"
一.awk变量

内置常用变量

$0      当前记录,当前行所有列
$1~$n   当前记录的第n个字段,字段间由FS分隔
FS      输入域分隔符,等价于命令行-F,默认为空格
NF      当前记录中的字段个数,就是有多少列,列总数,$NF则表示最后一列
NR      已经读取的记录数,就是第几行,从1开始
FNR     当前记录数
RS    控制记录分隔符,默认为换行符
OFS   输出字段分隔符 默认也是空格
ARGC  命令行参数个数
ARGV  命令行参数排列
FILENAME awk浏览的文件名

自定义变量类型

echo |awk "i="hello world"{print i}"
echo |awk "i=1122 {print i}"
数组
echo |awk "{a[1]="hello";a[2]="world!";print a[1],a[2]}"
二.awk常用逻辑运算
?           条件表达操作符
|| && !     并、与、非
~  !~       匹配操作符,包括匹配 不匹配

+ - * / % ^ 算术操作符
++ --        前缀和后缀

= += *= / = %= ^ =  赋值操作符 
< <= == != >= >     关系操作符     
BEGIN  在输出界面第一行输出相关
END    在输出界面最后一行输出相关
三.awk条件判断

1.直接在最外层

echo "11 22" |awk "$1==11{print $2}"

2.使用if语句

```echo "11 22" |awk "{if($1==11) print $2}"```

3.与或非

与
echo "11 22" |awk "{if(($1==11) && ($2=22))  print $2}"
或
echo "11 22" |awk "{if(($1==10) || ($2=22))  print $2}"
非
echo "11 22" |awk "{if($1!=10)  print $2}"

4.匹配

 ~      模糊匹配
 ==     精确匹配
 !~     不匹配
echo "ansible new switf" |awk "{if($1 ~ i)  print $1}"
echo "ansible new switf" |awk "{if($1 !~ 0)  print $1}"

5.正则匹配

last |awk "/root/{print $0}"
last |awk "/roo*/{print $0}"
last |awk "/^root /{print $0}"
四.awk循环

for(i=1;i<=10;i++)
类似C等语言的循环

使用awk将每行插入一个符号"|"和tab建
last |awk "{for(i=1;i<=NF;i++){printf $i "|	"} print ""}"

NF 每一行所拥有的总字段数

for(i in 数组)
类似shell

echo|awk "BEGIN{a[1]=1;a[2]=2}END{for(i in a) print i,a[i]}"
五.常用内置函数
gsub(r,s)          在整个$0中用s替代r,相当于 sed "s///g"
gsub(r,s,t)        在整个t中用s替代r
index(s,t)         返回s中字符串t的第一位置
length(s)          返回s长度
match(s,r)         测试s是否包含匹配r的字符串
split(s,a,fs)      在fs上将s分成序列a 
sprint(fmt,exp)    返回经fmt格式化后的exp
sub(r,s)           用$0中最左边最长的子串代替s,相当于 sed "s///"
substr(s,p)        返回字符串s中从p开始的后缀部分
substr(s,p,n)      返回字符串s中从p开始长度为n的后缀部分
六.运维常用的awk

1.打印指定倒数字段数

利用NF打印倒数字段
比如打印倒数第2行
last |awk "{print $(NF-1)}"

2.打印文件第1000行到2000行

awk "1000<=FNR && FNR <=2000" file
awk "{if(1000<=FNR && FNR<=2000) print $0}" file

3.使用for循环、数组、自加对netstat的tcp状态统计

netstat -an |awk "/^tcp/ BEGIN{s[$NF]++} END{for(a in s) print a,s[a]}"

4.替换

eg: test.txt
zhangsan 70 99 88 77 good
lisi 90 77 66 88 good
sansan 80 88 78 89 good
awk "{if($2>=90) gsub($NF,"Very Good")} {print $0}" test.txt
zhangsan 70 99 88 77 good
lisi 90 77 66 88 Very Good
sansan 80 88 78 89 good

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110634.html

相关文章

  • Linux命令学习之:awk命令

    摘要:调用有三种方式调用命令行方式其中,是真正命令,域分隔符是可选的。在中,文件的每一行中,由域分隔符分开的每一项称为一个域。默认域分隔符是空白键或键所以表示登录用户,表示登录用户以此类推。 Linux命令学习之:awk命令 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为...

    Amos 评论0 收藏0
  • SegmentFault 技术周刊 Vol.19 - Linux 文本处理三利器

    摘要:所以,本期周刊将介绍命令行世界中最常用的文本处理命令三巨头,让它们带你初步领略命令行的强大。简单的,可以直接理解为是一个数据处理工具,倾向于将一行文本分成数个字段来处理,适合小型数据的处理。 showImg(https://sfault-image.b0.upaiyun.com/226/799/2267992322-586b7c52ed9fc); 之前看过一篇文章《当我们 chmod ...

    hightopo 评论0 收藏0
  • linux 常用命令top、awk、sed等

    摘要:负值表示高优先级,正值表示低优先级最后使用的,仅在多环境下有意义上次更新到现在的时间占用百分比进程使用的时间总计,单位秒进程使用的时间总计,单位秒进程使用的物理内存百分比进程使用的虚拟内存总量,单位。进程使用的未被换出的物理内存大小,单位。 1、watch命令 :周期性的执行下个程序,并全屏显示执行的结果 -n:指定周期秒数 -d:高亮显示变动过的地方 -t:关闭watch 命令在顶部...

    BlackHole1 评论0 收藏0
  • LinuxLinux 常用命令

    摘要:作者本文原载于,不允许转载关于命令的正则表达式使用的是不同标准的正则表达式,而且与中的正则表达式标准还不一样,真的蛋疼,详见正则表达式派别综述。 作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~ 0. 关于 Linux 命令的正则表达式 awk、sed、grep 使用的是不同标准的正则表达式,而且与 C++、P...

    mzlogin 评论0 收藏0
  • 玩转Linux - 常用的命令和操作

    摘要:实例列出所知道的所有命令。中命令用于显示或设置网络设备。是发现主机连接最有用最通用的命令。并且将查找到的子目录和文件全部进行显示。打印全部选项和每个选项的简短说明。打印不能向传统平台移植的结构的警告。 简述 每个程序员基本都应该用过Linux操作系统,有的用来搭建服务器,有的用来安装前端扩展插件工具等等,但是无一例外都是需要操作Linux,所以我这次分享一些常见的实用的命令。 本文将持...

    JackJiang 评论0 收藏0

发表评论

0条评论

qujian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<