当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 使用AWK的六个技巧
帖子发表于 : 2011-01-19 21:42 
头像

注册: 2010-10-18 14:39
帖子: 677
送出感谢: 0 次
接收感谢: 1
使用AWK的六个技巧
发表于:2011-1-18

Awk一直是我爱与恨交织的源泉。它是一个功能强大的命令;有了它,建立真正的程序都是有可能的。

本文,你可以用我的六个例子,在你喜欢的终端上感受一下awk。

AWK是一个被设计用于处理文件或数据流中基于文本的数据的程序语言。它是广泛使用string数据类型,关联数组(即依关键字串排序的数组),以及正则表达式的程序语言的一个典范。

AWK是早起出现在第七版Unix,作为一种为Unix管道添加运算特性的方式而倍受欢迎的工具之一。今天,每一个类Unix系统当中,AWK语言都成为了标配特性。在单一Unix规格(Single UNIX Specification)中,AWK被作为Unix操作系统的一个必须组件提及。除Bourne shell之外,AWK是唯一在标准Unix环境中可用的脚本语言。他同样是Linux标准基础规格书(Linux Standard Base specification)中建议加进的特性之一。

AWK的实现以软件方式存在于几乎所有其他的操作系统之中。

早期AWK的能力、简洁和限制激发了Larry Wall 写出Perl——一个新的、功能更加强大的POSIX (可移植性操作系统接口)AWK。而AWK(GNU AWK)也被定义起来。虽然AWK和sed(流编辑器stream editor)是为了支持单行代码程序而设计的,可是早期的贝尔实验室AWK用户也经常写出结构良好的大的AWK程序出来。

1. 免重排序移除文本中的重复行

使用awk,可以无需对内容重排序而找到文件中重复的行。Awk不用排序也能找到重复的行并删除,你可以将结果重定向到另外一个文件中去。

#awk '!x[$0]++'

例如

echo -e "aaa\nbbb\naaa\naa\nccc\naa"|awk \!'x[$0]++'

输出:

aaa
bbb
aa
ccc


使用这一命令,你可以选择一些文件,并计算它们的大小,比如计算一个目录中所有文件的大小:

ls -l | awk '{s = s+$5 }; END { print s }'

或者是计算出当前目录及其子目录下所有.mp3文件大小:

ls -lR |grep .mp3 | awk '{s = s+$5 }; END { print s }'

等等。只需改变ls,你就可以选择不同的文件名或文件类型。

3. 别于之前find命令的另一种选择

搜索你电脑上所有的.mp3文件并计算出其大小:

find / -name "*.mp3" -exec ls -l {} \; | awk '{s = s+$5 }; END { print s }'


列出最常用的命令:

history | awk '{a[$'`echo "1 2 $HISTTIMEFORMAT" | wc -w`']++}END{for(i in a){print a[i] "\t" i}}' | sort -rn | head


分解与编号每行及其域。这很有用,尤其当你想用awk分析某一对象而有布置从何开始时。

awk '{print NR”: “$0; for(i=1;i<=NF;++i)print “\t”i”: “$i}'


以扩展名.new重命名文件

ls -1 pattern | awk '{print "mv "$1" "$1".new"}' | sh

你可以改变模式串,以显示或改变特定类型的文件。

参考:
# Robbins, Daniel (2000-12-01). “Awk by example, Part 1: An intro to the great language with the strange name”. Common threads. IBM DeveloperWorks. http://www.ibm.com/developerworks/linux ... -awk1.html. Retrieved 2009-04-16.
# Robbins, Daniel (2001-01-01). “Awk by example, Part 2: Records, loops, and arrays”. Common threads. IBM DeveloperWorks. http://www.ibm.com/developerworks/linux ... -awk2.html. Retrieved 2009-04-16.
# Robbins, Daniel (2001-04-01). “Awk by example, Part 3: String functions and … checkbooks?”. Common threads. IBM DeveloperWorks. http://www.ibm.com/developerworks/linux ... -awk3.html. Retrieved 2009-04-16.
# AWK – Become an expert in 60 minutes
# awk tutorial

英文原文:history | awk '{a[$'`echo "1 2 $HISTTIMEFORMAT" | wc -w`']++}END{for(i in a){print a[i] "\t" i}}' | sort -rn | head
转载请注明:Linux人社区 英文资讯翻译专版 编译
http://www.linux-ren.org/modules/newbb/viewtopic.php?topic_id=58758&post_id=322363#forumpost322363


_________________
Linux人社区开源新闻资讯翻译专版小编。翻译来自互联网上最新的英文开源资讯,提供给大家最迅即、最忠实于原文的开源业界动态、软件更新、有用技能等等。不至之处欢迎指正!xyxzfj@gmail.com


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 使用AWK的六个技巧
帖子发表于 : 2011-01-20 14:50 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
总结是好。只是发错版块了。


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译