打印uniq输出的第一行

时间:2011-04-04 09:39:01

标签: awk uniq

>cat testing.txt
aaa bbb
aaa ccc
xxx yyy
zzz ppp
uuu vvv
uuu ttt

我想根据第一个字段显示uniq行,并输出第一个出现的行

aaa bbb
xxx yyy
zzz ppp
uuu vvv

当我这样做时:

>uniq testing
I get:
aaa bbb
aaa ccc
xxx yyy
zzz ppp
uuu vvv
uuu ttt

这不是我想要的。

4 个答案:

答案 0 :(得分:3)

另一个 awk 解决方案:

awk '!_[$1]++' infile

的Perl:

perl -ane'
  print unless $_{$F[0]}++
  ' infile

答案 1 :(得分:1)

如果您不介意订单

$ awk '(!( $1 in arr) ){arr[$1]=$0}END{for(i in arr) print arr[i]}' file

或者,您可以使用Ruby(1.9 +)

$ ruby -ane 'BEGIN{h={}}; h[$F[0]]=$_ if not h.has_key?($F[0]) ; END{h.each{|x,y| puts "#{y}" }} ' file
aaa bbb
xxx yyy
zzz ppp
uuu vvv

答案 2 :(得分:1)

确保在将输入传递给uniq

之前对其进行排序

cat testing.txt |排序| uniq -w3

答案 3 :(得分:0)

uniq支持使用-w标志仅检查N个字符。如果您的文件确实如此,则可以执行uniq -w 3