ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell脚本awk应用

2021-05-21 12:29:57  阅读:155  来源: 互联网

标签:脚本 shell passwd etc awk print NR bash


awk

工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。

awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。

在使用awk命令的过程中,可以使用逻辑操作符:"&“表示"与”、"||“”表示"或"、"!“表示"非”

还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

命令格式
awk 选项 ‘模式或条件 {操作}’ 文件1 文件2 …
awk - f 脚本文件 文件1 文件2 …

awk常见的内建变量(可直接用)

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,i而awk一次仅读入一条记录,以进行处理。预设值是’\ln’

一些awk小应用#awk ‘{print}’ ll #输出ll文本

#awk ‘{print $0}’ ll #输出全部文本

#awk ‘NR==1,NR==3{print $0}’ ll #输出第1和第3行文本

#awk '(NR>=1)&&(NR<=3){print $0}'ll #输出大于等于且小于等于3的文本

#awk ‘(NR>=5)||(NR<=3){print $0}’ ll #或会匹配前面的

#awk ‘(NR%2==0){print $0}’ ll # 取偶数行

#awk ‘/^12/ {print $0}’ ll #查找以12开头的文本

#awk ‘BEGIN {x=0};//bin/bash$/{x++};END{print x}’ /etc/passwd #统计/etc/passwd中以/bin/bash结尾的文件多少行

#grep -c “/bin/bash$” /etc/passwd #上同

#awk -F “:” ‘{print $3}’ /etc/passwd # 以:分隔符截取文件第3段

#awk -F “:” ‘{print $1,$3}’ /etc/passwd #截取第1和第3段

#awk -F “:” ‘$3<5{print $1,$3}’ /etc/passwd #取第3段小于5的行输出其第3和第3行

#awk -F “:” ‘!($3<200){print $1,$3}’ /etc/passwd # 取反输出

#awk ‘BEGIN {FS=":"};{if($3>900);{print $1,$3}}’ /etc/passwd #以:分隔符输出

#awk -F “:” ‘{max=($3>=$4)?$3:$4;{print max}}’ /etc/passwd #:分隔符判断第三行是否大于等于第四行,大于取第三行,否则取第四行

#awk -F: ‘{print NR,$0}’ /etc/passwd # 输出行号

#awk -F: ‘$7~"/bash"{print $1,$3,$7}’ /etc/passwd #输出第7个字段包含/bash行的第一个第二个第七个字段

#awk -F: ‘$1~“root”{print NR,$1,$7}’ /etc/passwd

#echo $PATH | awk ‘BEGIN {RS=":"};END {print NR}’ # echo交给awk处理以:分割输出行号

#echo $PATH | awk ‘BEGIN {RS=":"};BEGIN {RS="/"};{print NR,$0};END {print NR}’ #上同

#awk -F: ‘/bash$/ {print | “wc -l”}’ /etc/passwd # 查找/bash结尾以:分割的行号

#free -m | awk ‘/Mem:/ {print int ($3/($3+$4)*100)"%"}’ # 取内存的比例

#top -b -n 1 | grep Cpu | awk -F, ‘{print $2,$4}’| awk ‘{print int ($1/$3)"%"}’#cpu比例

#seq 10 | awk ‘{getline;print$0}’#getline用法

#seq 10 | awk ‘{print$0;getline}’

#echo “A B C D” |awk ‘{OFS="|";print $0;$5=$5;print $0}’#以|分割A B C D

标签:脚本,shell,passwd,etc,awk,print,NR,bash
来源: https://blog.csdn.net/zhouziyu00/article/details/117115283

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有