频道栏目
首页 > 系统 > Linux > 正文
Linux文本处理工具
2014-12-02 09:42:52         来源:arbboter的专栏  
收藏   我要投稿

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 
/* 解析:构建数组,使用循环语句输出 */

一个批量修改文件名的例子:需要将当前目录下file_类似的文件去掉前缀file
#批量修改文件名示例
#自动生成文件
echo good | awk '{for(i=0; i<20; i++){s="touch file_no.txt";gsub("no", i, s);system(s)}}'
#获取当前文件列表
ls -l | awk '{if($9 != "")print $9}'
#批量修改文件明:获取文件列表;过滤掉不需要的文件,gsub字符串操作函数
ls -l | awk '{if($9 != "")print $9}' | awk '/^file/ {src=$0;gsub("file",""); cmd="mv src dst"; gsub("src", src, cmd); gsub("dst", $0, cmd); system(cmd);}'



点击复制链接 与好友分享!回本站首页
相关TAG标签 文本 工具
上一篇:linux常用命令之目录处理
下一篇:linux常用命令之文件收索
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站