什么是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
最重要的两个匹配模式是 BEGIN
和 END
,这两个参数会告诉操作,在读取之前和读取最后一行之后进行什么操作。如:
awk 'BEGIN{sum=0} {sum+=1} END {print sum}' data/hg38.genome
表示在读取第一行之前赋值
sum
为0,每读取一行加1,最终读取完毕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有许多其他的内置参数