找回密码
 注册
查看: 4854|回复: 0

linux系统下使用uniq和awk去重方式

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-9-3 15:00:06 | 显示全部楼层 |阅读模式
使用uniq去重,添加-c参数,显示去重的个数。7 p6 s) z2 o+ {& ?: \
cat host.txt |uniq -c # |* W% ^2 A! ^: N, |5 I( I3 f; M

) E; \2 e8 D+ a$ Bawk命令去除文件中重复数据的办法1 l' b0 a, |1 ~9 j
  首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:
; }( D* W! T7 b' W/ r" Y# cat dup
) E1 R( p2 v% P# u. s- n0 @$ Yhello world
4 I9 Q1 w2 Y7 H$ D" Uawk
% K0 D6 ?4 c' f; K# Dcoding ants
) N: e9 k8 K; F% H7 ]9 Ehello world
! c: t& K0 a, z7 y) ?* G7 j1 `5 vawk0 Q3 h7 {8 o  J, r' z: i" c' F
hello world
+ H% ~% _8 D; V0 U: o; T$ Z% Mawk
8 `' I! j1 f. w( G5 r: Ncoding ants
% u$ V8 B6 Q7 W. j; Z9 V1 Acoding ants7 n1 B9 ]8 }- {: a" ~
coding ants
( ~8 [8 X! \% K" gcoding ants" G$ A7 Y4 T9 v4 G. z5 h' P
  共有11行,后面8行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:
# z; p7 u; [$ k) H: F# awk '!a[$0]++' dup
5 L5 K' T& d# d) ehello world
5 G! ?& d0 a. w8 ~6 p2 zawk
( @7 H) X7 R, Bcoding ants% b- w# ~2 Y. |$ k  o5 ]

5 c; s4 `) c8 d. z6 o  在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。
* i6 ]( ]/ l; h  D) k" N  实现去除重复功能的就是这里的Pattern:* A. f1 b' l9 m+ w' `
!a[$0]++
" @* A, O/ |7 {# W0 Z9 h4 i' H: ^, M( G( p# L
  在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于
1 H/ t/ v- U  d% T- T. N+ r! K!0
( x3 a1 W" Y  J3 L" Q7 t
9 b0 f( q% L2 `+ H- i: B0 j  而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。7 Q- ?5 I! L) U/ r0 R9 e0 `
  当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。
# W; q8 S7 v2 C  m: E' q! w  p. \4 Q& O) N# d4 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 04:27 , Processed in 0.021092 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表