- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
使用uniq去重,添加-c参数,显示去重的个数。1 ~' M: @8 { e6 ^* L& Z( j( @6 n2 h
cat host.txt |uniq -c
6 c2 u: M C9 I( \" c9 Q0 L/ c2 t: e+ Y. ^
awk命令去除文件中重复数据的办法9 `* m( p; p. j& E: T% c3 K8 l- o
首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:
9 q `# V! M: }. A4 G# cat dup, D- S3 u2 m1 U- Y
hello world
. m+ j9 x" `8 L+ Nawk0 ]& _% @. V) _( H5 u
coding ants
" q: }2 ^0 J7 q/ s& B$ Chello world
T: @4 H1 O2 [% e4 I: J- T/ }awk
+ `+ X# U1 G9 O) t5 qhello world/ ~8 Y, X$ R# D
awk$ J; t' y2 W( \' q7 Y
coding ants
# \9 T8 r( \/ j9 s+ g7 Ycoding ants
2 l# D! G8 c; \, z! p3 Ecoding ants$ ~& M5 C1 L4 n3 b* {1 U
coding ants
+ t" }, M, h: z' x$ ]% A9 J 共有11行,后面8行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:1 \& @* O# B+ ]1 r4 J9 L) [
# awk '!a[$0]++' dup
: v2 b. O6 N: Nhello world
, G2 i7 P7 K9 _; I/ q2 q: D; Eawk+ a$ |7 E8 f2 P( l9 [2 \
coding ants
. l2 m7 i, K" d) z7 e. w9 E) j7 d: B. Y( L) c# c# F$ ` g9 j8 V; ^
在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。 j# N1 _7 b( H8 d/ G& t6 @
实现去除重复功能的就是这里的Pattern:
' [' a# ^, D( M1 G1 S!a[$0]++' o: o! ^4 d8 k! ?! h1 c o
: C, I4 u: x# @( G! J: C, Z
在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于
; J5 u, \* D# o! O! i5 A!0
9 Y1 {4 v/ O% |1 b+ ~
0 W$ V1 H2 m9 c5 t) t2 [) J 而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。
6 M- I4 V" ?0 V- u/ l8 }" U 当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。- j1 N& C$ a, `2 n+ X( Z
! }' @9 Z: i6 C1 T1 N/ b |
|