当前位置: 首页 > news >正文

linux 三剑客老大-awk

1,取指定行的指定列

[root@90-99 oldboy]# cat aa.txt 
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
11 k
12 l
13 m
14 n

[root@90-99 oldboy]# awk '{if(NR>=5 && NR<=10) print $1}' aa.txt#me:NR代表行号,&&代表并且
5
6
7
8
9
10

也可以使用sed来去行数,awk取列,命令如下:

sed  -n '5,10p' aa.txt  | awk '{print $1}'

[root@90-99 oldboy]# awk '{if(NR>=5 && NR<=10) print $2}' aa.txt  
e
f
g
h
i
j

2,巧用多个字段作为分隔符

[root@90-99 wuxy]# stat test.sh |sed -n '4p'
Access: (0664/-rw-rw-r--)  Uid: (  504/    wuxy)   Gid: (  504/    wuxy)

[root@90-99 wuxy]# stat test.sh |sed -n '4p'|awk -F "[(/]" '{print $1}'
Access: 
[root@90-99 wuxy]# stat test.sh |sed -n '4p'|awk -F "[(/]" '{print $2}'
0664
[root@90-99 wuxy]# stat test.sh |sed -n '4p'|awk -F "[(/]" '{print $3}'
-rw-rw-r--)  Uid: 
[root@90-99 wuxy]# stat test.sh |sed -n '4p'|awk -F "[(/]" '{print $4}'
  504

备注:

-F "[(/]" 代表以 ( 或者 / 作为分隔符!!   

在seq 中用-s指定分隔符。eg: 

[wuxy@robin shell]$ seq  -s "----" 5
1----2----3----4----5

3,NR代表行号,NF代表列数

取文件的最后一列

cat aa.txt | awk '{print $NF}'

4,awk过滤以某个字符开头的 行

[root@robin tmp]# ls -ld *
-rw-r--r--. 1 root root    0 Mar  8 14:42 a
lrwxrwxrwx. 1 root root   16 Mar  8 14:43 b -> /home/wuxy/tmp/a
drwxr-xr-x. 3 root root 4096 Mar  8 17:57 c
drwxr-xr-x. 2 root root 4096 Mar  8 17:58 e
[root@robin tmp]# ls -ld * | awk /^l/
lrwxrwxrwx. 1 root root   16 Mar  8 14:43 b -> /home/wuxy/tmp/a

[root@robin tmp]# ls -ld * | grep '^l'
lrwxrwxrwx. 1 root root   16 Mar  8 14:43 b -> /home/wuxy/tmp/a

[root@robin tmp]# ls -ld * |sed -n '/^l/p'
lrwxrwxrwx. 1 root root   16 Mar  8 14:43 b -> /home/wuxy/tmp/a

[root@robin robin]# ifconfig eth1 | awk '/inet addr/'   ###过滤以inet addr 开头的行
          inet addr:192.168.90.96  Bcast:192.168.90.255  Mask:255.255.255.0

[root@robin robin]# ifconfig eth1 | awk '/inet addr/ {print $3}'
Bcast:192.168.90.255


[root@robin robin]# ifconfig eth1 | sed -n '/inet addr/p' ###sed也可以完成
          inet addr:192.168.90.96  Bcast:192.168.90.255  Mask:255.255.255.0

5,取第二列到最后一列

[root@robin zabbix]# cat agent-info | grep MAC
MAC:00:21:F6:00:00:3B

需要MAC地址:00:21:F6:00:00:3B

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" '{for(i=2;i<=NF;i++) print $i}' 
00
21
F6
00
00
3B

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" '{for(i=2;i<=NF;i++) print $i":"}'
00:
21:
F6:
00:
00:
3B:

##print 默认打印完后的分隔符是换行符,可以用ORS=":" 来修改行分隔符,即把换行符换成冒号分隔

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) print $i}'
00:21:F6:00:00:3B:[root@robin zabbix]# 

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) print $i}' | wc -l
0

##没有换行符时,不是一行,改进如下:

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) print $i;printf "\n"}'                  
00:21:F6:00:00:3B:

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) printf $i;printf "\n"}'  
0021F600003B

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) print $i;print "\n"}'  
00:21:F6:00:00:3B:

:[root@robin zabbix]#

注意循环完后用的时printf打印一个换行符 "\n",而不是print

最终命令为:

[root@robin zabbix]# cat agent-info | grep MAC | awk -F":" 'BEGIN{ORS=":"}{for(i=2;i<=NF;i++) print $i;printf "\n"}'  | sed 's#.$##g'

00:21:F6:00:00:3B

##print打印完成后默认换行,printf打印完成后默认不换行,需指定printf "\n",同时都可以用引号""指定输出的连接符

6,awk取指定行

[root@robin ~]# ifconfig eth1 | awk "NR==2" | cut -c 21-33              
192.168.90.96

[root@robin ~]# ifconfig eth1 | awk -F"[ :]+" 'NR==2 {print $4}'
192.168.90.96

7,awk变量

变量名     含义

ARGC       命令行变元个数

ARGV       命令行变元数组

FILENAME   当前输入文件名

FNR        当前文件的记录号

FS         输入域分隔符,默认为一个空格

RS         输入记录分隔符

NF         表示当前行记录域或列的个数

NR         表示当前行的记录号或行号

OFS        输出域分隔符

ORS        输出记录分隔符

$1         第一列,$2第二列,$0整行

$NF        最后一列

$(NF-1)    倒数第二列




      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1613172,如需转载请自行联系原作者



相关文章:

  • 基于Linux服务器的性能分析与优化(2)
  • mouseleave与mouseout区别
  • windows 7 与音频相关的几个服务
  • JavaScript精粹读书笔记(1,2)
  • restrore progress
  • 基于AJAX.NET技术的DataGrid控件开发
  • 将对象序列化和反序列化
  • 忘记linux中root密码怎么办?两种方法两步教你轻松搞定修改新的密码(仅限CentOS6.X)...
  • Oracle使用透明网关访问SQLSERVER数据库
  • Ts基础
  • SVN “不能打开文件“.svn/lock” 权限不够”精解
  • Oracle动态SQL和静态SQL比较
  • Android学习笔记--Content Provider 1
  • SpringMVC 参数注入
  • 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利...
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2017年终总结、随想
  • ECMAScript6(0):ES6简明参考手册
  • FineReport中如何实现自动滚屏效果
  • JavaScript 基础知识 - 入门篇(一)
  • Python连接Oracle
  • ViewService——一种保证客户端与服务端同步的方法
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 反思总结然后整装待发
  • 回顾 Swift 多平台移植进度 #2
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)965
  • 聊聊directory traversal attack
  • 前言-如何学习区块链
  • 如何选择开源的机器学习框架?
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • - 转 Ext2.0 form使用实例
  • 说说我为什么看好Spring Cloud Alibaba
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # include “ “ 和 # include < >两者的区别
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #QT(串口助手-界面)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2)nginx 安装、启停
  • (pytorch进阶之路)扩散概率模型
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (七)Java对象在Hibernate持久化层的状态
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (五)Python 垃圾回收机制
  • (转)http-server应用
  • .cfg\.dat\.mak(持续补充)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET分布式缓存Memcached从入门到实战
  • @Autowired和@Resource装配
  • @ConfigurationProperties注解对数据的自动封装
  • @Controller和@RestController的区别?