linux awk快速入门

aw快速入门

简介

awk 是linux下的一种编程语言,用于处理linux下的文本和数据。其输入可以是标准输入、文件等。支持正则表达式,顺序结构和分支结构等。在linux/unix操作系统下,awk是一个非常强大而快速的文件处理工具,基本上用一行命令便可以完成别的变成语言几十行甚至上百行代码的功能。其处理文件时是一行一行读入,逐行处理,功能强大、快速且不占用太多内存。awk内部还可以实现数组、函数的功能,非常灵活。


语法

awk '{pattern + action}' file

  • pattern 是模式,即在file中匹配的模式,可以是正则表达式,关系表达式等,利用pattern可以对file里面的数据进行匹配和筛选
  • action是动作、操作,即对file中符合pattern的内容进行操作,可以是赋值,输出等等

执行

     有两种执行方式

  • awk -F field-separator 'command' var=value file(s)
  • awk -f awkscriptfile var=value file(s)

其中参数为

-F field-separator,即-F 后面接域分隔符,可以是字符串或正则表达式

command是命令,即上文所说的pattern+action;file是输入文件

-f awkscriptfile是从awk脚本文件中读取awk程序,从而执行

例子

awk 'BEGIN{i=0} {if($1=="chr1"){ print $1,$2,$3;i++}} END{print i}'  file

从file中提取第一列为”chr1“的行,并输出该行的前三列($1,$2,$3),并统计符合条件的行数(print i)


用处

在Linux系统下,简单处理文本比较快速的方法是利用awk,比Python和perl速度快(复杂的处理还是要用这些脚本语言),主要有以下应用

  • Linux 下快速处理格式化的文本(如tab键,空格分割的文本文件等),可以提取,计算某一列的信息。
  • 比较两个文件的异同,如提取两个文件中相同及不同的行

例子

1 计算某一列数字的和

awk '{s+=$1}END{print s}' 

2 比较两个文件相同的行

awk '{if(ARGIND==1){var[$0]}else{if($0 in var)print $0}}'

3 比较两个文件不同的行

awk '{if(ARGIND==1){var[$0]}else{if($0 in var) delete var[$0]}}END{for(i in var) print i}'

4 找到某一列数字的最大值

awk '{if(max<$1)max=$1}END{print max}'


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值