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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-9-3 15:00:06 | 显示全部楼层 |阅读模式
使用uniq去重,添加-c参数,显示去重的个数。  i2 x5 U2 h( ~: K( a
cat host.txt |uniq -c
+ W9 D% S3 {- E4 g9 l* ~  e: D" ^, g! K
awk命令去除文件中重复数据的办法
1 X8 o5 n/ P4 k  首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:5 t7 l5 g7 y5 b& z# M+ r% j2 i, Z
# cat dup/ a4 f8 z4 U. m4 W$ |! Q( b
hello world" N* u9 q' T  p
awk
/ v0 E% ^4 O# d2 y7 Fcoding ants# [' q" M5 p  [  y- k: u+ m
hello world
7 s! v3 i3 Y2 K4 ~7 `: Qawk
# C% a: f$ I  M/ R+ z5 Ohello world2 @! d( W# a9 [: ^$ Z- Y8 j5 T
awk+ f! F, O) U3 X" n3 O
coding ants! X9 C+ y, Q0 u& ]+ m+ h, z
coding ants# I, R& L1 w# V; Q! R
coding ants
! M7 ?2 ?. B' u- g. ^, k% Ycoding ants. u0 w4 \- l7 n! H& C( ^7 u
  共有11行,后面8行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:/ @5 }9 L; }9 P
# awk '!a[$0]++' dup
! v" k" f/ N, l$ t' G8 R0 Hhello world6 i3 B$ w/ c% ?
awk
# [3 L8 j( n9 {1 k( c" ?coding ants4 L# m4 L  |# F1 u* l, s1 w/ C

7 C, t% R( s/ n" h) u% r1 n9 e  s  在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。
$ s% T0 {2 E+ _( J! ?  实现去除重复功能的就是这里的Pattern:
" l' B# t( M8 T!a[$0]++
( ^% Q6 E) D: u8 t
7 R0 T0 n# j. O* a& z  在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于/ ~8 Q3 z6 i, }/ f
!0
  x5 K* z& @5 |" W- V+ v& X5 Z! ?. X/ e3 p" M% e) _" V
  而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。* d2 {# O( z# K6 K2 w
  当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。4 A! s+ ?# Y0 W5 }# x
/ S) H6 r4 y% Q" Z7 M5 {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 05:32 , Processed in 0.015205 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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