Shell学习笔记(15)-awk

awk是一种可以处理数据、产生格式化报表的语言,功能相当强大。awk的工作方式是读取数据文件,将每一行数据视为一条记录(record),每笔记录以字段分隔符分成若干字段,然后输出各个字段的值。
ps -ef | awk '{print $2}'
awk对每一条记录,都会套用一个"样式{操作}",如果该行符合样式,就执行指定的操作。样式或操作之一,可以省略。如果只有样式,表示要显示符合样式的数据行;如果只有操作,表示对每一数据行都执行该项操作。

awk常用的作用格式:
    awk "样式" 文件: 把符合样式的数据行显示出来
    awk '{操作}' 文件:对每一行都执行{}中的操作.
    awk '样式{操作}'文件:对符合样式的数据行,执行{}中的操作.


示例1:
    awk '/La/' dataf3
    显示含'/La/'的数据行

示例2:
    awk '{ print $1,$2 }' dataf3
    显示dataf3每一行的第1和第2个字段

示例3:
    awk '/La/{print $1,$2}' dataf3
    将含有La关键词的数据行的第1及第2个字段显示出来

示例4:
    awk -F: '/^ols3/{ print $3,$4 }' /etc/passwd
    使用选项-F,指定:为分隔字符,帐号ols3的uid(第3字段)及gid(第4字段)显示出来.

示例5:
    awk -F: 'BEGIN{OFS="+++"}/^ols3/{ print $1,$2,$3,$4,$5 }' /etc/passwd
    以:为分隔字符,+++为输出字段分隔符,将帐号ols3的第1~5栏显示出来
    输出: ols3+++x+++1002+++1002+++
    本例中,BEGIN{}区域指示awk一开始先做初始化的操作,即设定OFS="+++"。变量OFS的作用是存储输出字段的分隔符。接着,寻找ols3的帐号行,找到后,使用print印出第1~第5个字段,且彼此用 +++ 隔开.

实例应用
    
1.取得网卡的IP:
    ifconfig | grep 'inet addr:' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'
2.取得网络设备名称:
    cat /proc/net/dev | awk -F: '/eth.:|ppp.:|wlan.:/{print $1}'
    在本例中,-F:把分隔字符设为:,而且,采用多选一的样式 /eth.:|ppp.:|wlan.:/。这个样式的意思是:设备名称可以是eth0:、ppp1:、wlan1:这3个其中之一。一旦找到符合样式的字符串后,去掉:,取其中的第一个域值,因此,可能的答案是etho0或ppp1或wlan1。
3.取得系统内在大小

    cat /proc/meminfo | awk '/MemTotal/{print $2}'



假设将值存在文件t中,文件t内容如下,第一行:a b c

需要将a、b和c分别赋给外部变量x、y和z,则脚本可写成如下:
eval $(awk 'NR==1{ printf("x=%s\ny=%s\nz=%s",$1,$2,$3); }' ./t)

echo $x
echo $y
echo $z

请注意printf函数中的换行符\n是必须的,起关键作用的是eval命令,它在很多场景有特别的用处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值