awk命令的使用

47 篇文章 3 订阅
6 篇文章 1 订阅

-------------参考网络视频

0、前言

awk命令是用来处理文件内容中的列数据,与sed处理行数据刚好对应;所以二者经常同时使用。

awk是3个创始人名字首字母的。

awk默认是以空格或Tab分隔。

当不是以二者分隔的话,需指定参数-F+分隔符 ,比如以冒号分隔

awk  -F: '{print $7}'  /etc/passwd

比如以空格分隔

awk  -F " " '{print $7}'  /etc/passwd

1、awk语法结构:

awk   参数  脚本语句’   待操作语句

awk   参数  -f  '脚本文件'    待操作文件

脚本语句格式:

/pattern/{actions}        -------------->pattern是正则表达式,actions是操作

condition{actions}

-------------->actions区别与sed,awk命令的actions需要用{}括起来。

$0 会打印所有的列;

$1 会打印第1列;

以此类推

2、举例:

某产品的库存量低于75则在行末标注需要订货

//testfile内容:

productA   30

productB  76

productC 55

以下3种形式都可以:

其中的;分号都可以省略。

printf的格式与c语言中的格式完全相同:需要添加\n, 因为printf不带换行功能 

awk '$2<75 {printf("%s\t%s\n),$0,"REORDER";} $2>=75 {print $0;}' testfile 

 printf也可以不使用()

awk '$2<75 {printf "%s\t%s\n", $0, "REORDER";} $2>=75 {print $0;}' testfile 

 print自带换行功能:注意在"  REORDER"  字符串里面添加空格才有效,如果不添加空格会紧跟在原内容后面

awk '$2<75 {print $0 " REORDER";} $2>=75 {print $0;}' testfile 

结果如下: 

productA   30   REORDER

productB  76

productC 55  REORDER

此外:

awk命令的condition还可以是两个特殊的conditon,BEGIN和END,

BEGIN后面的actions在处理整个文件之前执行一次;

END后面的actions在整个文件处理完之后执行一次。

awk命令可以像C语言一样使用变量(但不需要定义变量)

例:统计一个文件的空行数:

awk '/^ *$/  {x=x+1;}   END   {print x;}'  awk.sh

例:统计进程号在2600和2700之间的 有多少?

ps aux|awk '$2<2700 && $2>2600  {x=x+1;}   END   {print x;}' 

与EDN 对应的宏是BEGIN

BEGIN  :pattern未匹配文件之前执行某些操作,后面跟上{}

EDN :pattern匹配文件结束之后,执行某些操作,后面跟上{}

awk 'BEGIN {FS=":"} {print $7}' /etc/passwd

 结果等价于 -F 参数

 awk  -F: '{print $7}'  /etc/passwd

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值