- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
使用uniq去重,添加-c参数,显示去重的个数。
: j2 z' T8 @% o8 _cat host.txt |uniq -c . t3 T, E) R! v7 z1 ^' |4 S- f0 }0 W
$ Q2 g* H t4 M9 F" T$ yawk命令去除文件中重复数据的办法
! V( @! r* d4 i. c7 e. Y- ? |7 } 首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:
$ Z6 G0 F5 g! v% Y' G# cat dup5 n( f3 y: w. ?
hello world
8 u3 k# f# [/ R7 @3 F4 Eawk
# U. R$ M: r0 Z* m; y! Pcoding ants9 a/ U1 h: W4 ]% I5 w3 t C$ G
hello world* k# y) s: q0 l4 l
awk
) t# ?9 X6 w4 {$ Z/ J5 {hello world; V' B0 M0 C& J3 d! P' x
awk
' K* @/ d9 u4 M: r; Q9 z+ h7 {coding ants$ Z& v3 y$ K& S- A( v
coding ants
4 }! X- w& k2 c# Fcoding ants
1 _2 H! u+ P4 U( t8 s/ Bcoding ants
/ T) ]& g9 i% b$ S( F( R 共有11行,后面8行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:
! s+ g/ o# Q& J/ w, z0 R# awk '!a[$0]++' dup
" u! M* I, ~+ x3 f1 g) Y& Khello world
6 Q+ Y4 M( A5 x5 S" o7 ]) K1 Lawk% A: C0 u) [5 }+ x
coding ants4 f- J2 `! _0 W" \5 a/ Z+ B
5 g1 U3 z: h9 w' L1 G/ k
在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。
, f1 z* E8 G2 S! s# s: L- X 实现去除重复功能的就是这里的Pattern:
1 o, c. O9 e7 I4 o" R, n7 q2 a6 w!a[$0]++
% r7 W4 _- D+ r0 B/ r4 @ |/ |1 F5 E) m) n% o6 i3 F
在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于
F* J* G5 U- d/ O!0/ G# ]; u5 c8 o8 y ?' n. ]: L
, }7 w, z+ k3 x: i( n/ e5 R% V
而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。 N7 n8 z2 G- ~" I6 ]2 Z+ ~
当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。
; Y% j! e2 q3 r. N$ v5 w
: }7 ]3 r4 P" B+ [* O |
|