Команда Groupwise uniq?

Классическое решение:

grep -v '^#' <input |grep 'print'
7
19.06.2014, 20:43
4 ответа

Это кажется безумием, и надеюсь, что есть лучший способ, но:

tac foo | sort -k 1,1 -u

tac используется для переверстывания файла, так что вы получаете последний, а не первый.

-k 1,1 говорит использовать для сравнения только первое поле.

-u делает его уникальным.

5
27.01.2020, 20:16

Если вы не возражаете против порядка вывода, вот решение awk:

$ awk '
    {a[$1] = !a[$1] ? $2 : a[$1] < $2 ? $2 : a[$1]}
    END {
        for (i in a) { print i,a[i] }
    }
' file
hi 2
hello 67
ho 3000
4
27.01.2020, 20:16

Еще несколько вариантов:

  1. perl, если вас не волнует порядок следования строк.

    perl -lane '$k{$F[0]}=$F[1]; END{print "$_$k{$_}" для файла ключей(%k)}".
    
  2. Проще awk

     awk '{c[$1] = $0;} END{for(i in c){print c[i]}}' file
    
  3. Глупая оболочка

    , когда читаешь a b; do grep -w ^"$a" file | tail -n1 ; done < file | uniq
    
3
27.01.2020, 20:16

Ну, вы можете сделать это с помощью сортировки

sort -u -k1,1 test

EDIT: tac - это решение

0
27.01.2020, 20:16

Теги

Похожие вопросы