shell脚本awk应用

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

上一篇:物联网为什么需要5G?


下一篇:光通信 700MHz 技术产业研讨会 5G 能给你带来什么