一, 简介
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
二, 语法
awk 对输入文件中的每一行执行操作, awk 参数 ' BEGIN{} // {action1;action2} ' END{} 文件名
-F 指定分割符 , -F ","
-v 制定变量, -v a="1"
三, 用法
1, 查看test.txt 的第10行到第20行
awk '{if (NR>=10 && NR<=20) print $1}'
2, 字符串分割连接,按列进行文件的提取
已知tt.txt中文内容 chr1:11276204-11276291|gc=43.7
输出:chr1 11276204 11276291
awk -F '[\\:\\-\\|]' '{print $1 "\t" $2 "\t" $3}' tt.txt
\\ 对字符串进行转义, 输出连接 $1 "\t" $2
3,BEGIN END 模块
通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
统计/etc/passwd 用户个数
awk 'BEGIN{sum=0}{sum++; print $0}END{print "total users is " sum}' /etc/passwd
统计文件/etc 文件夹大小
ll /etc/ | awk 'BEGIN{size=0}{size=size+$5; print $5}END{print "tota size is "size/1024"k"}'
统计文件夹 /etc root 永用户文件大小
ll /etc/ | awk 'BEGIN{size=0} {if($4=="root"){size=size+$5; print $4,$5}} END{print "tota size is "size/1024"k"}'
4,正则表达式
查找tt.txt 文件中第一列是chr1的行
awk -F':' '{if($1~/chr1/){print $0}}' tt.txt
5,常用变量及运算符