Linux 三剑客之AWK

一, 简介

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,常用变量及运算符

你可能感兴趣的:(Linux 三剑客之AWK)