Объяснение команды sed

Если вы хотите/можете использовать инструменты, отличные от 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указывает шаблону не считать все до него как часть совпадения. Так что это будет печатать только то, что приходит после матча.

1
21.10.2021, 11:38
1 ответ

Использование 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.

https://raku.org

3
22.10.2021, 06:56

Теги

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