超简单的删除文件中重复行的方法及详解

用下面这个命令可以很简单方便的删除掉一个文本文件中的重复行:

awk '!x[$0]++' afile > bfile

很神奇是不是,那么它是如果做到的呢?

先说明下awk的基础知识, awk会依次读入输入文件中的每一行,来执行这个表达式'!x[$0]++',

而表达式中的'$0'就代表文件中一行数据,如果表达式的值为真就会执行动作,在这里并没有指定什么动作,默认是‘print’,

也就是输出当前行的数据,如果表达式的值为假,就什么也不做。

好了,有了这些基本知识,我们就以一个文件为例,来看下是如何删除重复行的。

简单起见,假定输入文件'afile'中只有三行文字:

aa
bb
aa

1,在读入第一行'aa'时,'$0'的值是'aa',而关联数组x这时什么也没有,x['aa']是空,所以‘x[$0]++’的值为假,因为有‘!’求反,最终该值为真,所以输出第一行'aa'

2,同样的道理,在读入第二行'bb'时,关联数组x中只有x['aa']=1,所以x['bb']也是空,最终该值为真,输出第二行'bb'

3,在读入第三行时,由于关联数组中x['aa']=1,所以x['aa']++的值为真值1,所以'!'求反的结果,最终值为假,不输出第三行的'aa

同样以下再有‘aa'的行也是不会输出的,达到了删除重复行的效果。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值