Linux文本处理工具
1.awk
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 /* 解析:构建数组,使用循环语句输出 */
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。