什么是awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
在许多情况下,如果你需要处理文本文件的信息(如:BED和FASTA文件),你可以使用Python脚本进行处理,或者使用awk命令的单行操作。

awk语法

awk语法模式
awk 'pattern {action; other action}' file
该命令行表示,当 pattern为TRUE时, awk 会执行括号内的操作。如果没有特异的模式,将会对文件中的每一行执行操作。如:
awk '{print}' data/hg38.genome | head
最重要的两个匹配模式是 BEGINEND ,这两个参数会告诉操作,在读取之前和读取最后一行之后进行什么操作。如:
awk 'BEGIN{sum=0} {sum+=1} END {print sum}' data/hg38.genome

表示在读取第一行之前赋值 sum 为0,每读取一行加1,最终读取完毕 print 最终的 sum
注意:当变量未被赋值时, awk 会默认变量初始为0或者空字符,因此 awk '{sum+=1} END {print sum}' data/hg38.genome 和上述命令的结果是一致的

输入和输出

awk 包含几个重要的内参变量,如: $1 表示读取的每一行的第一个元素, $2 表示第二个元素,以此类推。 $0 表示读取每一行的所有元素
如: awk '{print $2}' data/hg38.genome | head 表示打印该文件中的第二列元素
如果打印多列,一般使用awk '{print $1, $2}' data/hg38.genome | head

使用逗号分隔两个变量时,输出结果以单个空格分隔,如果没有逗号(如:awk '{print $1 $2}')则两组变量之间无分隔符

此外同样可以使用字符对每一列添加前缀,如:
awk '{print "First column:" $1}' data/hg38.genome |head

awk有许多其他的内置参数