Если вы хотите/можете использовать инструменты, отличные от grep
, вы можете довольно легко сделать это с помощью awk
, так как похоже, что вам всегда нужен конец строки. Вы можете напечатать только последнее поле, например:
zcat /mnt/internal-app/logs/internal-app.log_2019-08-2* | awk '/UUIDs in this bucket/ {print $NF}'
Я не знаю, поддерживают ли какие-либо формы zgrep
регулярные выражения в стиле Perl, но предположим, что ваша версия тоже поддерживает, вы могли бы сделать это, например
zgrep -Po 'UUIDs in this bucket \K.*' /mnt/internal-app/logs/internal-app.log_2019-08-2*
, так как \K
указывает шаблону не считать все до него как часть совпадения. Так что это будет печатать только то, что приходит после матча.
Использование Raku (, ранее известного как Perl _6)
raku -e 'for lines.grep({ !/ ^ \> / }).join {.say for.comb.Bag.sort(*.values).reverse};'
Пример ввода:
>sp|P01308|INS_HUMAN Insulin OS=Homo sapiens OX=9606 GN=INS PE=1 SV=1
MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAED
LQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN
Пример вывода:
L => 20
G => 12
A => 10
E => 8
Q => 7
P => 6
C => 6
V => 6
R => 5
S => 5
Y => 4
F => 3
T => 3
N => 3
M => 2
D => 2
K => 2
I => 2
W => 2
H => 2
Код, который вы представляете, может быть написан на ряде языков, (не только sed
), любой из которых может задеть вас за живое. В качестве примера приведенный выше код был пере -написан на Raku, члене семейства языков Perl -.
Большая часть кода Раку должна быть довольно простой -объясняющей:lines
считываемой иgrep
-педальной !
отсутствия ^
начала -строки ->
. ] 'больше -чем' угол, иjoin
-изд. Соединяемые строкиcomb
-ed (разбиваются на отдельные символы ),Bag
-ged (каждый присутствующий символ становится key
и вхождения подсчитываются/записываются как values
),sort
-ed в reverse
, чтобы сначала поместить наибольшее число #вхождений, а затем вывести say
.