awk技巧-!a[$0]++

转载 2013年12月05日 17:43:56

转载自:http://www.51testing.com/html/87/363787-811057.html

解释下
awk '!a[$0]++' file

一看之下,首先是想到又用到awk的hash,又是缺省的pattern,一下子来了兴趣,做了以下的分析

这个要从awk的执行模式开始说,最后结合++运算符,和hash特色
有三个基本知识点是要了解的
1:a++的作用是先附值,再累加a,与++a正好相反。

2:hash的初始是undef,通过直接附值或声明进行定义,如a[1]=1,或直接声明a[1]。

3:awk的基本模式是,pattern   { action statements },action部分是可以省略的,缺省情况下是输出,即{print $0},至于pattern可以理解成是表达式,通过pattern表达式的值的真假,来确定是否要进行action。比如1,最简单的awk用来实现cat的功能就是 awk '1',这边1就是pattern,当然,1也可以是2,3,4,5等其他数字,但如果用字母的话,就不行,因为字母会解释成变量,变量初始值未定义,初始值为假,或者可以加个!反义

结合上边三点来分析awk '!a[$0]++' file
"!a[$0]++"

0:整个模式,没有用到action,所以采用的是默认的{print $0},即在patten为真条件来,输出行
patten分析:
1:使用了一个hash数组,a,数组的键值采用$0,即每行值
2:当a[$0]未声明时,a[$0]为假,在未声明的情况下,进行一次a[$0]++后,a[$0]即为真
3:!取反
结论:当相同的行第一次读入时,pattern为真,行输出,再次读入后,patten为假,行乎略

基本理论知道了,要用得出来还得多锻炼应用

上周帮别人写个awk,也是这种情况
我写的
awk '{if($2 in a);else{a[$2]=$0}}END{for(b in a)print a[b]}' urrfile

后来别人给出更简单的答案
awk ' !($2 in i){ i[$2]; print } ' urrfile

现在看来,还可以更简单些
awk '!a[$2]++' urrfile


【注意】:这是前加/后加的区别,前几天还说过。


   后加: 先使用变量的值,再自加。

   !a[$0]++ 对这个表达式的求值,它的值与 !a[$0] 相同(先使用变量a[$0]的值),但对表达式求值后 a[$0]会自加。

相关文章推荐

AWK 实例与编程技巧

  • 2008年11月28日 08:58
  • 241KB
  • 下载

Linux-awk命令、技巧.doc

  • 2013年04月23日 11:00
  • 126KB
  • 下载

从命令行取linux中eth0的IP地址学习awk

从命令行取linux中eth0的IP地址学习awk 请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。 解答: 说明...

awk应用技巧

1: 引用自身的变量不需要加 $ 符号,如 NF,NR等 2: 引用外部变量需用 ' ' 包围变量名,如 '$1 ~ /'$pattern'/' 3: 如果要在AWK操作前给变量赋值, 用-v ,...

awk用法技巧

AWK 是什么? AWK 是一种用于处理文本的工具。AWK工具也有自己的语言,它在很多方面和shell非常类似,在AWK创造之初,其目的主要都是用于文本处理,所以这种语言的基本语法都是只要在输入数...

awk 使用技巧: 匹配部分元素

加入有文件内容如下所示 注意到如果用前3列作为主键,这个文件5行里有两个主键,分别是1 2 3 与 1 1 1,如果我们需要累加这个文件中的最后一列 达到如下效果: 使用指令如下:使用a...

AWK 使用技巧总结

awk的基本功能是对文件进行指定规则浏览和抽取信息。 基本格式: (1) awk [-F 分隔域] 'command' input-file(s) (2) 写入shell脚本中 (3) awk...

awk使用技巧

awk教程 awk的基本功能是对文件进行指定规则浏览和抽取信息。 基本格式: (1) awk [-F 分隔域] 'command' input-file(s) (2) 写入shell脚本中...

Awk里的域赋值操作和部分源码解析($1=$1,$0=$0,FS,OFS)

前言:cu上出了个shell题:http://bbs.chinaunix.net/thread-2319120-1-1.html第八题:GNU awk的$1=$1到底有什么作用?$0=$0呢?这题问...

GNU awk的$1=$1到底有什么作用?$0=$0呢?

cu上出了个shell题:http://bbs.chinaunix.net/thread-2319120-1-1.html第八题:GNU awk的$1=$1到底有什么作用?$0=$0呢?这题问得相当的...
  • ANLJF
  • ANLJF
  • 2011年05月20日 00:25
  • 1833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:awk技巧-!a[$0]++
举报原因:
原因补充:

(最多只允许输入30个字)