首页 > 系统相关 >Linux四剑客之awk

Linux四剑客之awk

时间:2022-12-20 14:33:27浏览次数:41  
标签:passwd 取行 etc 剑客 awk Linux print NR

awk,可以说是一门语言了,单行脚本;
取行;
取列;
混合取行与列;
判断与循环;
数组;

格式:类似sed
awk 选项 '条件{动作}' 文件
条件:找谁;
动作:干啥
取出/etc/passwd第1列第3列和最后一列,注$0是代表整行
awk -F: 'NR==1{print $1,$3,$NF}' /etc/passwd

awk执行流程:
和sed类似,一行一行的读取内容,然后找谁,干啥,符合条件,执行操作,不符合,下一行;
awk没有默认输出,默认只输出符合条件的动作条件;
awk和sed会一直执行到文件的最后一行,结束;
awk比sed复杂的地方在于,读文件之前和读文件完毕之后,的相关操作;
读文件之前,先处理选项,或者BEGIN{}里的内容,比如,-F:,先处理分隔符;
读文件之后,处理END{}里的内容,BEGIN和END现在都很少用了;

取行
案例1:取出/etc/passwd的第1行
awk 'NR==1{print $0}' /etc/passwd //NR,Number Record,记录号,行号,仅取行,还可以简写
awk 'NR==1' /etc/passwd

案例2:取出第2行到第5行的内容
awk 'NR>=2 && NR<=5' /etc/passwd //&&表示并且,||表示或者,!=表示不等于;

案例3:过滤出/etc/passwd中包含root或noboey
awk '/root|nobody/' /etc/passwd

案例4:取出包含root的行到包含nobody的行
awk '/root/,/nobody/' /etc/passwd


小结:
awk + NR 取出指定的行,指定范围的行;
awk + // 过滤
awk + 其他变量功能用于精确过滤。(需要配合取列功能使用)
awk -F: '$3>=1000' /etc/passwd //取第3列大于1000的行,也就是UID大于1000

取列
案例:使用awk取出ls -l的大小列和最后一列
ls -lh /etc/hosts | awk '{$5,$NF}'
grep -i failed secure.log | head | awk '{print $(NF-3)}'

awk默认以空白字符分隔,可以加选项-F指定分隔符,如-F:,-F':',-F[: ],-F[/: ]+,都可以

对齐:column -t
awk -F: '{print $1,$3,$NF}' /etc/passwd | column -t

案例:指定复杂分隔符,同时也是取行取列
[root@web01 ~]# ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'
stat /etc/hosts | awk -F'[/(]' 'NR==4{print $2}'


对列的判断,取出/etc/passwd中UID大于100的行,取出这行中第1列,第3列和最后一列;
awk -F: '$3>100{print $1,$3,$NF}' /etc/passwd

free | awk 'NR==3{print $3}'
free | awk '/Swap/{print $3}'
free | awk '/Swap/ && $3>=0 {print "系统异常占用Swap"}'

案例:过滤出/etc/passwd第4列的数字是以0或1开头的行,输出第1列,第3列
之前^或$表示某一行的开头或结尾
在awk中因为awk可以取列,通过列可以过滤这一列包含xxx,或者以x开头以x结尾;
awk -F: '$4 ~ /^[01]/' /etc/passwd //~,表示包含的意思,这里表示第4列包含以0或1开头的意思,!~,表示不包含;

awk统计与计算
1)统计次数
仅仅需要统计一下出现了多少次或者出现了多少个,还可以用wc -l
awk '{i=i+1;print i}' /etc/passwd //如果第一次执行i,为空(0)
awk '{i=i+1} END{print i}' /etc/passwd
2)计算总和
seq 10 > num.txt
# awk '{i=i+$1}END{print i}' num.txt

标签:passwd,取行,etc,剑客,awk,Linux,print,NR
From: https://www.cnblogs.com/mclind/p/16994117.html

相关文章

  • 如何在 Linux 下使用 TC 优雅的实现网络限流
    1.Linux下的流量控制原理通过对包的排队,我们可以控制数据包的发送方式。这种控制,称之为数据整形,shapethedata,包括对数据的以下操作:增加延时丢包重新排列重复、损坏速率......
  • linux安装stable diffusion2.0完整教程-还不会安装sd2.0?一篇文章教会你AI绘画
    原文地址:https://chenhx.blog.csdn.net/article/details/128383113以下教程出自飞链云AI技术人员,欢迎使用目前国内顶尖的AI绘画工具,微信小程序搜索:【飞链云版图】注意:请......
  • Linux下安装python+appium+android(附带各种错误解决办法)
    文章目录​​安装AndroidSDK​​​​安装nodejs、NPM、cnpm​​​​安装Appium​​​​安装Python和基础库​​​​设置WIFI连接及调试​​​​引用​​​​安装错误解决​......
  • Linux特殊权限 SUID、SGID、Sticky
    转载自:https://www.jianshu.com/p/5c1db5821a14在理解特殊权限之前,需要先具备几个关于安全上下文的认知:前提:进程有属主和属组;文件有属主和属组;任何一个可执行程序文......
  • linux下安装pymssql
    各版本的下载地址:​​https://pypi.python.org/pypi/pymssql/​​Windows可以下载installer文件,直接是编译好的,可以直接安装Linux下需要安装几个基础类库:Cython:pipinstall......
  • Perf -- Linux下的系统性能调优工具
    Perf简介Perf是用来进行软件性能分析的工具。通过它,应用程序可以利用PMU,tracepoint和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题(pert......
  • linux 配置yum源
    1. 切换到yum源配置目录cd/etc/yum.repos.d/2.备份所有配置文件mkdirbackmv*./back3.新建一个xxx.repo文件touchCentos-Base.repo4.编辑文件内......
  • 让Linux任务在后台可靠运行的几种方法
     我们经常会碰到这样的问题,用telnet/ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终......
  • linux 中如何查找在过去一段时间内修改过的文件
     001、查找在过去五分钟内修改过的文件find./-mmin-5 002、查找在过去10分钟内修改过的文件find./-mmin-10 003、查找在过去一天内修改过的文件......
  • linux 中记录程序运行的时间
     001、[root@pc1test1]#start=$(date+%s)##记录程序的开始时间[root@pc1test1]#echo$start1671529118[root@pc1test1]#end=$(date+%s)##......