Linux系统扫地僧命令awk

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}'  #方法二
  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值