try (u - ваш файл)
sort -n -t\| -k2 -k1 < u |
awk -F\| '$1 < 8000 { a[$2]++ ; print }
$1 >= 8000 { if ( !a[$2] && ( !e[$2] || e[$2]<$8 )) {u[$2]=$0;e[$2]=$8;} ; }
END { for ( i in u ) print u[i] ;}'
gives
4000|1234||||||23
5000|1234||||||40
15000|456||||||29
9000|123||||||22
where
-t\|
and -F\|
instruct sort and awk to use |
as separator-k2
-k1
: сортировать по второму, затем по первому полю|
в строке сортировки должен быть последний символ в строке $1 < 8000 { a[$2]++ ; print }
если меньше 8000, печатать строки и запоминать значение $2$1 >= 8000 { ... .. }
если больше, сохраните наибольшее значениеEND { for ( i in u ) print u[i] ;}
при выходе выведите все значения
возможно, вам потребуется повторная сортировка.
условие строки 2 можно упростить (поместив условие if за пределы {})
некоторые строки в вашем тесте имеют 9 полей.
обратите внимание, что команда может быть однострочной
... | sort -n -t\| -k2 -k1 | awk -F\| '...'
Я думаю Вам даже макрос не нужен. Существуют параметры конфигурации, касающиеся свертывания (и ).
Попробуйте следовать конфигурации и прокомментируйте макрос:
set collapse_all = yes
set uncollapse_new = no # (default is yes)