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 下快速处理格式化的文本(如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}'