1、不使用排序的方式删除重复的行
awk ' !x[$0]++' filename
解释 !x[$0]++
首先这个命令没有{action}也就是说,只要pattern部分判断值为真(非0)就打印整行,否则跳过不打印。
!
取反,把假的变成真的,把真的变成假的。
x[$0]
首先创建一个map叫x,然后用当前行的全部内容$0
作为map的key,到map中查找相应的 value,如果没有找到,就为假。而此时前面有!表示了取反,则整个表达式!x[$0]++
就成了真,所以awk会打印出来。如果找到 value,就为真。而此时前面有!表示取反,则整个表达睡!x[$0]++
就成了假,所以awk不会打印出来。
++
如果某个key找不到对应的value,该++操作会先把对应的value设成0,然后在自增加1,这样下次在遇到重复的行的时候,对应的key就能找到一个非0的value了。
以上就表明了awk是如何去除重复行打印信息的。