awk引子
awk是一门语言,也是一个命令。
最擅长处理文本的语言或命令
Linux有三剑客命令:grep/sed/awk
三剑客各自特长:
grep #过滤内容
sed #取行
awk #取列---取行---过滤
1、什么是awk
awk是一门语言,通过处理复杂文本字符串,取到最终需要的内容
C、C++开发人员,处理字符串几乎都会用awk。
命令行来说,掌握awk命令基本使用
1)awk功能
常用功能是【取列】,但是也可以【取行】和【过滤】
2)awk语法
awk '{print $1}' 文件 ##分隔符是空格
awk -F ":" '{print $1}' 文件 ##指定冒号":"为分隔符(指定分隔符-F)
注意写法:一对单引号里加一对大括号,里面加print $1,结尾加操作的文件
说明:
1)取的内容是每一行固定列或整行
2)不同列的内容默认分隔符是[空格]。
3)$1是第一列,$2是第二列,........ $NF最后一列,倒数第二列$(NF-1),$0是整行
4)-F指定分隔符,":"是具体的分隔符,使用双引号引起来。
指定分隔符过滤(-F)
##语法:awk -F "分隔符" '{print $1}' /etc/passwd
如下: 1)取/etc/passwd的第1列
awk -F ":" '{print $1}' /etc/passwd
2)取/etc/passwd的第整行 #$0整行
awk -F ":" '{print $0}' /etc/passwd
3)取/etc/passwd的倒数第2列 #NF是尾列;-1为倒数第2列
awk -F ":" '{print $(NF-1)}' /etc/passwd
4)取/etc/passwd的第1列、第3列和最后一列
awk -F ":" '{print $1,$3,$NF}' /etc/passwd #逗号是空格
5)在输出的结果中加想要加的内容,这里加oldboy
awk -F: '{print $1,"oldboy",$2}' /etc/passwd
6)过滤ip a结果中的ip地址
ip a|grep "/24"|awk '{print $2}'|awk -F/ '{print $1}'
##grep "/24" 过滤含有ip行 ##awk '{print $2}' 过滤出第2列 10.0.0.128/24 ##awk -F/ '{print $1}' 过滤第2列中的ip以/为分隔符把/24分割掉
同时指定多分隔符
#语法:awk -F "[ /:=]" '{print $1,$2}' 文件 #遇到空格,斜线,冒号,等号都认为是分隔符。 如:ip a|grep "/24"|awk -F "[ /]" '{print $6}'
1)过滤stat /etc/hosts中的0644
stat /etc/hosts|grep 0644|awk -F "[(/]" '{print $2}'
多分隔符连续
#语法:awk -F "[ /:=]+" '{print $1,$2}' 文件 #遇到空格,斜线,冒号,等号都认为是分隔符。 #碰到连续的指定分隔符算一个分隔符。 如:ip a|grep "/24"|awk -F "[ /]+" '{print $3}'
1)echo ===1---2///3/@@@@4 >oldboy.txt 把文件中的数字取出来
awk -F '[=/@-]+' '{print $2,$3,$4,$5}' oldboy.txt
awk取行(sed)
seq 5 >oldboy.txt ##数据准备 awk 'NR==4' oldboy.txt ##取第4行 awk 'NR==2,NR==5' oldboy.txtv ##取2-5行方法一;'NR==2,NR==5' 表示一个条件范围,awk 会在满足 NR==2 到 NR==5 条件(即第2行到第5行)的范围内执行其后的动作(默认的动作是 {print},即打印当前行)。 head -5 oldboy.txt|tail -4 ##取2-5行方法二;head -5过滤前5行;tail -4再过滤后4行(即2-5行) sed -n '2,5p' oldboy.txt ##取2-5行方法三;-n取消默认输出,p打印
awk过滤内容(grep)
stat /etc/hosts|grep 0644 ##过滤含有的行 【rep 过滤内容】 stat /etc/hosts|awk '/0644/' ##过滤含有的行[awk '/ /' ]
awk组合用法
过滤stat /etc/hosts中的0644 stat /etc/hosts|awk -F "[(/]" '/0644/{print $2}' #方法一 stat /etc/hosts|awk -F "[(/]" 'NR==4{print $2}' #方法二