命令总结 awk

回复 收藏
命令总结
awk
【功能说明】:
        awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
【语法格式】:
        awk [-F  field-separator]  'commands'  input-file(s)
commands 是真正awk命令,[-F域分隔符是可选的。 input-file(s) 是待处理的文件。
【选项参数】:
参数
说明
-F
分隔符 -F :-F [:%]以:和%同时为分隔符
NR
代表行
$1
代表第一列
【实践操作】:
1如果只是显示/etc/passwd的账户
#cat /etc/passwd |awk  -F ':'  '{print $1}'  
root
daemon
bin
Sys
这种是awk+action的示例,每行都会执行action{print $1}
-F指定域分隔符为':'
2:三种awkIP的方法
案例
[root@mob ~]# ifconfig eth0|grep 'inet addr'
          inet addr:192.168.127.132  Bcast:192.168.127.255  Mask:255.255.255.0
方法一:
[root@mob ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}'
192.168.127.132
方法二:
[root@mob ~]# ifconfig eth0|grep 'inet add'|awk -F '[ :]' '{print $13}'
192.168.127.132
小结:这个方法很方便吧,同学们可以多用,选取包含IP地址行的特殊关键字'inet addr’过滤然后,使用awk以空格和:同时做分隔符,然后取出需要的内容。
本答案的最大缺点就是计算$n的时候很费劲,因为inet前面有多个空格,查到$13,真是不容易
方法三:
[root@mob ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $4}'
192.168.127.132
提示:本题NR是行号,分隔符+号匹配,[]里一个或多个任意一个分隔符,这里就是匹配一个或多个冒号或空格。
1)awk -F后面跟分隔符 ‘[空格:]+’ ,其中[空格:]多分隔符写法,意思是以空格或冒号做分隔,后面的"+"号是正则表达式,意思是匹配前面空格或冒号,两者之一的1个或1个以上。
2)NR==2和sed -n "2p",相当,意思都是选择第几行,例:
[root@oldboy ~]# ifconfig eth0|awk NR==2
inet addr:10.0.0.185 Bcast:10.0.0.255 Mask:255.255.255.0
3)指定awk -F '[ :]+'分隔符后,不同字符串被分隔的列依次为:
[size=10.5000pt]
inet
addr
10.0.0.185
Bcast:10.0.0.255 Mask:255.255.255.0
第一列
第二列
第三列
第四列
后面忽略不计。
4)整个答案awk部分意思是,通过NR==2取出第二行,然后,通过-F '[-:]+多分隔符正则匹配,然后通过{print $4}打印出第四列

2016-04-30 23:22 举报
已邀请:
0

a57601247

赞同来自:

学习了
0

qidi2015

赞同来自:

这个比较用心了。
顺便说一句,取IP  可以直接用hostname -I
0

lijiya

赞同来自:

学习了
0

渐行渐远

赞同来自:

学习
0

gsy36559067

赞同来自:

qidi2015 发表于 2016-5-1 07:05
这个比较用心了。
顺便说一句,取IP  可以直接用hostname -I

{:4_91:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: