Вывести первую строку вывода uniq - PullRequest
0 голосов
/ 04 апреля 2011
>cat testing.txt
aaa bbb
aaa ccc
xxx yyy
zzz ppp
uuu vvv
uuu ttt

Я хочу отобразить уникальные строки на основе первого поля и вывести их только при первом появлении строки

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 ]

3 голосов
/ 04 апреля 2011

Другое awk решение:

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

Perl:

perl -ane'
  print unless $_{$F[0]}++
  ' infile
1 голос
/ 04 апреля 2011

Убедитесь, что вы сортируете свои данные перед передачей в uniq

cat testing.txt | сортировать | uniq -w3

1 голос
/ 04 апреля 2011

если вы не возражаете против заказа

$ 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
0 голосов
/ 04 апреля 2011

uniq поддерживает проверку только N символов с использованием флага -w.Если ваш файл действительно выглядит так, вы можете сделать uniq -w 3.

...