] Кажется, что вы хотите получить только первое событие каждого [] ключа1 [
]. [
]Это оттянет ожидаемый результат:[
] [$ awk '!($1 in a){print;a[$1]}' file
a1 2 l1
a2 2 l2
a3 2.5 l3
]
[][]Обновление[][
] []Если вы хотите, чтобы []ключ1[
] []или [] []ключ3[
] происходил только один раз:[
$ awk '!($1 in a) && !($3 in a){print;a[$1];a[$3]}' 1.txt
a1 2 l1
a2 2 l2
a3 2.5 l3
]
[][]Обновление 2[][
] []После прочтения вашего комментария, я думаю, следующее решение:[
] [$ sort -rnk2 file | awk '!a[$1]++' | awk '!a[$3]++'
a1 14.0 l6
a3 13.3 l8
a2 11.1 l2
a4 1.7 l1
] ] Вы можете просто добавить тест к вашему скрипту на perl. Используйте другой хэш, ключи которого являются 3-м полем, и печатайте каждую строку только в том случае, если это поле еще не было видно:[
] [$ sort -nk2 file | perl -ane '$k{$F[$1]}=$_ unless $s{$F[2]}++>0;
END{print "$k{$_}" for keys(%k)}'
a3 2.5 l3
a2 2 l2
a1 2 l1
]
[]NOTE: Это выведет и заголовок, но так же как и ваш подход, и так как вы не показываете его в выводе, я предполагаю, что заголовок на самом деле не является частью файла. [
]