Я надеялся, что к настоящему времени у нас будет MCVE, но мы этого не делаем, черт возьми, вот мое лучшее предположение о том, что вы пытаетесь сделать:
$ cat tst.awk
{
out = ""
for (pos=1; pos<=length($0); pos+=reps) {
char = substr($0,pos,1)
for (reps=1; char == substr($0,pos+reps,1); reps++);
out = out (reps > 1 ? reps "x" : "") char
}
print out
}
$ awk -f tst.awk file
3xad
d3xad3xa
fsdfjs
b5xC
3xad3xa
Выше былоЗапустите пример ввода, который любезно предоставил @Thor:
$ cat file
aaad
daaadaaa
fsdfjs
bCCCCC
aaadaaa
Вышеприведенное будет работать для любых вводимых символов, использующих любой awk в любой оболочке любого блока UNIX.Если вам нужно сделать это без учета регистра, просто бросьте tolower()
вокруг каждой стороны сравнения в самом внутреннем цикле for
.Если вам нужно, чтобы он работал с многосимвольными строками, вам придется рассказать нам, как определить, где подстроки интересуют начало / конец.