Chinaunix

标题: 如何删除重复行 [打印本页]

作者: 月光宝盒    时间: 2004-12-28 09:17
标题: 如何删除重复行
有文件:
aa  cc  dd ee
11 34  45 22
bb  cc dd ee
ff cc dd ee
....

如何将此文件中,第二,三列重复的行删除,只保留重复的一条记录?
作者: waker    时间: 2004-12-28 10:08
标题: 如何删除重复行
  1. awk '{if (a[$2]!=$2 && b[$3]!=$3) {a[$2]=$2;b[$3]=$3;c[$0]=$0}
  2. }END { for(i in c) print c[i]}'
复制代码

作者: waker    时间: 2004-12-28 10:22
标题: 如何删除重复行
就是会被排序
作者: zy962003    时间: 2004-12-28 10:33
标题: 如何删除重复行
sort -k2,3 |awk '{if(str!=$2$3){str=$2$3;print}}'
作者: waker    时间: 2004-12-28 11:43
标题: 如何删除重复行
学习大家的,改一下
awk '{if (a[$2$3]!=$2$3) {a[$2$3]=$2$3;print}}'
作者: 随风漂    时间: 2004-12-28 12:52
标题: 如何删除重复行
[quote]原帖由 "tianci3982730"]sort -u -k2,3  文件[/quote 发表:

作者: shenyanjun    时间: 2004-12-29 11:46
标题: 如何删除重复行
都是高手啊!
作者: GZQsimin    时间: 2004-12-29 16:00
标题: 如何删除重复行
都是高手 学到了很多
作者: srdrm    时间: 2008-01-24 10:10
cat test | uniq
作者: jinl    时间: 2008-01-24 10:21
原帖由 waker 于 2004-12-28 10:08 发表
awk '{if (a[$2]!=$2 && b[$3]!=$3) {a[$2]=$2;b[$3]=$3;c[$0]=$0}
}END { for(i in c) print c}'  

这个不保存c[$0],直接print $0,去掉END,就和你后面的代码功能一样了
不过这样可能速度没有a[$2$3]快
作者: springwind426    时间: 2008-01-24 19:06

  1. awk '!a[$2,$3]++' 数据文件
复制代码

作者: r2007    时间: 2008-01-24 19:42
关心效率的话
  1. awk '!($2" "$3 in a){a[$2" "$3];print}'
复制代码

作者: mcolinc    时间: 2008-01-24 19:51
原帖由 waker 于 2004-12-28 11:43 发表
学习大家的,改一下
awk '{if (a[$2$3]!=$2$3) {a[$2$3]=$2$3;print}}'


学习了
作者: welcome008    时间: 2008-01-25 16:59
俺只会awk
awk '{a[$2" "$3]=$0}END{for(x in a) print a[x]}' filename


作者: welcome008    时间: 2008-01-25 17:01
原帖由 waker 于 2004-12-28 11:43 发表
学习大家的,改一下
awk '{if (a[$2$3]!=$2$3) {a[$2$3]=$2$3;print}}'



这个不是很好,有漏洞
作者: ly5066113    时间: 2008-01-25 17:13
原帖由 r2007 于 2008-1-24 19:42 发表
关心效率的话
awk '!($2" "$3 in a){a[$2" "$3];print}'


这样更简洁:

awk '!a[$2" "$3]++'
作者: jinl    时间: 2008-01-25 23:08
原帖由 ly5066113 于 2008-1-25 17:13 发表


这样更简洁:

awk '!a[$2" "$3]++'


还能更精简么? ly5066113真是言简意赅
作者: chendeshen    时间: 2014-02-19 10:14
如何删除含相同列的行




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2