Por lo que vale, yo tenía la petición contraria. Yo quería que apareciera la lista de notificaciones. Resulta que el valor predeterminado en lxde (o tal vez ubuntu )es notify-osd
, que no muestra este ícono ni el historial de mensajes enviados por nada, incluido notify-send
.
Lo cambié a notification-daemon
y hace exactamente lo que quiero que haga. No estoy seguro de cómo piratear los scripts de inicio o la configuración para que lxde
lo haga automáticamente, pero ese es un problema solucionable.
Я предполагаю, что вы имеете в виду под «от центра» «последовательность, которая включает средний символ строки. Я добавил строку к тестовым данным, так что средний символ строки не является ни C, ни T:
$ cat file
CCCCTGTTGCCAAACAATGC
TTTTCCCGCCTTTGGCCTAC
TACACGGAACCTCTTTTTTA
CATAAAAAAAAAAAAACTCT
Решение основано на переменных awk RSTART и RLENGTH, которые задаются как результат -произведения функции match (), соответствующей шаблону, и некоторой арифметике для отслеживания того, где мы находимся в строке:
awk '{
line = $0
max = max_ctr = 0
mid = int(length($0)/2)
idx = 1
while (match( substr(line,idx), /[CT]+/ )) {
if (RLENGTH > max) max = RLENGTH
if (idx <= mid && mid <= idx+RLENGTH) max_ctr = RLENGTH
idx += RSTART + RLENGTH - 1
}
print $0, max, max_ctr
}' file
выходы
CCCCTGTTGCCAAACAATGC 5 2
TTTTCCCGCCTTTGGCCTAC 7 5
TACACGGAACCTCTTTTTTA 10 10
CATAAAAAAAAAAAAACTCT 4 0
В случае, если «от центра» означает «самая длинная строка, ближайшая к центру, но не обязательно пересекающая его», вы можете попробовать
awk '
{MID = int(length()/2);
MX = PTR = 0
T0 = $0
while (match ($0, /[CcTt]+/)) {if (RLENGTH > MX) MX = RLENGTH
SSTR = PTR + RSTART
SEND = SSTR + RLENGTH - 1
TMPS = SSTR - MID
TMPE = MID - SEND
if (SEND < MID) {P = TMPE; RES = RLENGTH}
else {if (SSTR <= MID) {P = 0; RES = RLENGTH}
else if ((P > TMPS) ||
(P == TMPS) && (RLENGTH > RES)) {P = TMPS; RES = RLENGTH}
}
PTR = SEND
$0 = substr ($0, RSTART + RLENGTH)
}
print T0, MX, RES
}
' file
Он перебирает строку от регулярного выражения до совпадения с регулярным выражением, сохраняя указатель на позицию в исходной строке. Таким образом, он подсчитывает расстояние между символами от конца строки до центра или от центра до начала строки и назначает длину строки наименьшего расстояния переменной результата. При равном расстоянии он сохраняет наибольшую длину.
Для шаблонов, пересекающих центр, результат эквивалентен образцам, приведенным ранее.