使用AWK的六个技巧

最新ubuntu/linux/开源新闻或者其它IT相关资讯
回复
头像
vikyzhang
帖子: 677
注册时间: 2010-10-18 14:39
联系:

使用AWK的六个技巧

#1

帖子 vikyzhang » 2011-01-19 21:42

使用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
Linux人社区开源新闻资讯翻译专版小编。翻译来自互联网上最新的英文开源资讯,提供给大家最迅即、最忠实于原文的开源业界动态、软件更新、有用技能等等。不至之处欢迎指正!xyxzfj@gmail.com
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 使用AWK的六个技巧

#2

帖子 eexpress » 2011-01-20 14:50

总结是好。只是发错版块了。
● 鸣学
回复