sed или awk: заменить на количество предыдущих событий - PullRequest
0 голосов
/ 23 апреля 2020

В текстовом файле выглядит так:

label_a 8 label_b 5
label_c 9 label_a 3
label_a 2 label_c 16
label_b 21 label_b 1
...

как заменить эти числа фактическим количеством предыдущих вхождений предыдущей метки, и поэтому результат будет выглядеть так:

label_a 1 label_b 1
label_c 1 label_a 2
label_a 3 label_c 2
label_b 2 label_b 3
...

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

awk лучший инструмент для этой работы:

awk '{for (i=2; i<=NF; i+=2) $i = ++freq[$(i-1)]} 1' file

label_a 1 label_b 1
label_c 1 label_a 2
label_a 3 label_c 2
label_b 2 label_b 3
1 голос
/ 23 апреля 2020

С учетом вашего ввода вы можете сделать:

$ awk '{for (i=1; i<NF;i+=2) printf "%s %s ", $i, ++arr[$i]; print ""}' file
label_a 1 label_b 1 
label_c 1 label_a 2 
label_a 3 label_c 2 
label_b 2 label_b 3 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...