【awk】 '!a[$0]++'去重原理分析
原文很多人都知道awk '!a[$0]++' file可以去除文本中重复的行,但是对其到底是如何去重的却不是很清楚,所以这里就单独来分析一下这个命令。
首先我们要知道这条命令是隐含了一个print $0的,完整命令如下:
awk判定以下三种情况为“假”,其他情况都为“真”:
数字 0
空字符串 ""
未定义的变量,对于未定义的变量var,如果要进行字符串操作,会被转成空字符串 "" ,如果要进行数学运算,会被转成数字 0 ,也可以使用 var"" 来强制转为空字符串 "" , var+0 来强制转为数字 0
所以上面这条awk语句的原理就是判断!a[$0]++的值,如果值为真就打印当前行,值为假自然就不会打印当前行了。
开始分析!a[$0]++吧,不过还得先看一下awk中操作符的优先级(由高到低排列):
这里我们可以将a[$0]数组取值替换为一个简单的变量,方便理解:
我们知道a++操作符是在变量a使用完之后再对变量进行自增,所以这里虽然++比!优先级高,先跟变量a结合,但是不会立即自增变量a的值,而是在!a之后在自增变量a的值。通过例子来理解:
现在是不是一目了然了,再代入回之前的例子中:
分析如下:
扩展阅读:永久在线免费的云服务器 ... amazon欧洲站 ... x86国产cpu ... 高清windows免费版播放 ... 免费excel永久免费版 ... 任天堂switch最新款 ... 韩国macbookpro ... xbox后面的插口 ... 美国欧洲日本韩国化妆品 ...