使用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 "\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 "\t" i}}' | sort -rn | head
转载请注明:Linux人社区 英文资讯翻译专版 编译
http://www.linux-ren.org/modules/newbb/ ... post322363
使用AWK的六个技巧
- vikyzhang
- 帖子: 677
- 注册时间: 2010-10-18 14:39
- 联系:
使用AWK的六个技巧
Linux人社区开源新闻资讯翻译专版小编。翻译来自互联网上最新的英文开源资讯,提供给大家最迅即、最忠实于原文的开源业界动态、软件更新、有用技能等等。不至之处欢迎指正!xyxzfj@gmail.com
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙