Linux文本处理工具

1.awk

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。awk相当于一门编程语言,有自己的很多语法,不过语法很简单,和C语言类似,语法要素有比如逻辑比较,if,内置变量,字符串处理函数,数组,循环语句这样的。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk执行时,其浏览标记为$1,$2...$n,这种方法称为域标记。使用$1,$4表示参照第1和第4域,注意这里使用逗号分隔域,使用$0表示使用所有域处理选项为
 awk '{pattern + action}' {filenames}
使用示例如下:
last -n 3 | awk '{printf("%-6s %s\n", NR, $1)}' 
/* 解析:NR内置变量代表已读记录数, $1类似的表示分割后的第几个参数,$0表示整条记录 */

cat /etc/passwd | awk -F ':' ' BEGIN {user_count=0} {printf("%-5d %-20s %s\n", ++user_count, $1, $7)} END {print "Found " user_count " users\n"} '
/* 解析:使用-F选项指定分隔符为':',命令选项分为三部分,第一部分为"BEGIN {user_count=0}",执行AWK之前执行,该命令定义了一个变量,用来统计用户数;第二部分为"{printf("%-5d %-20s %s\n", ++user_count, $1, $7)}",每条记录awk之后执行该命令;第三部分是"END {print "Found " user_count " users\n"}",这条命令最后执行,输出用户数 */

awk -F '#' '{printf("%8s %6s %16s %8s\n", $1, $2, $3, $4)}' 1.log
/* 解析:该命令使用'#'分割处理文件1.log中的每一行,并帅选按格式输出文本内容,其中处理文件的内容如下:
name#age#date#address
liuxiang#14#2014-05-23#cn
Tom#24#2013-09-12#us
lucy#18#2011-02-01#uk
*/

awk -F '#' '{if($2 >= "18"){ printf("%8s %6s %16s %8s\n", $1, $2, $3, $4)}}' 1.log
/* 解析:输出age大于等于18的记录 */
awk -F '#' '{record[1]=$1; record[2]=$2; record[3]=$3; for(i in record){printf("%-16s", record[i]); }printf("\n");}' 1.log 
/* 解析:构建数组,使用循环语句输出 */


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。