Linux 命令之awk

Linux 命令之awk

学习了将近半年的linux,一直觉得awk命令是最难的,所以我是是能避免就避免用。
曾经看过各种网页,包括菜鸟教程,也是只会一些基本的。
我比较喜欢在实践中学习知识,在这里给大家实操介绍一下awk。
awk命令形式
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
  • [-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量
  • ’ ’ 引用代码块
  • BEGIN 初始化代码块,在文件处理之前,初始化代码
  • // 匹配代码块,可以是字符串或正则表达式
  • {} 命令代码块,包含一条或多条命令
  • ; 多条命令使用分号分隔
  • END 结尾代码块,对文件处理完后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

我们来依次介绍一下含义

练习

我们以一个很小的文件为例:

cat test.txt
name	chinese	math	english
parry	78	90	88
alice	80	93	79
mike	89	87	87

1、如果我们想要提取chinese分数大于85的行,并且打印出该行的行号。

awk -F"\t" '$2>85{print NR "\t" $0}' OFS="\t" test.txt

1	name	chinese	math	english
4	mike	89	87	87
  • F:指定test.txt的分割符号是Tab键
  • $2:指第2列;以此类推,例如:$3指第3列;$0指打印所有列
  • NR:awk有很多内置函数,比如NR输出行号,NF输出列数
  • OFS:定义输出分隔符

2、如果想要统计一下chinese大于80的个数,小于80的个数,并且分别print为large和 small

awk -F"\t" 'BEGIN{A=0;B=0}{if ($2>80){A++;print "large"}else{B++;print "small"}} END{print A "\t" B}' OFS="\t" test.txt

large
small
small
large
2	2

BEGIN 设置A和B变量,如果chinese大于80,A就加1;反之,B加1

3、文件行列倒置

awk -F "\t" '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] "\t";print ""}}' test.txt

name	parry	alice	mike	
chinese	78	80	89	
math	90	93	87	
english	88	79	87
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值